我希望返回由CustomerID分组的最后一个事务日期,并使用SQLiteStudio 3.2.1。我的桌子是这样的:
CustomerID Date TransactionID Amount
1 2000-07-01 1 20.00
2 2000-07-04 2 40.00
1 2002-08-01 3 20.00
1 2007-01-01 4 60.00
2 2010-05-09 5 70.00
1 2012-06-25 6 35.00`这就是我希望最终结果是什么样子:
CustomerID Date TransactionID Amount Last Transaction Date
1 2000-07-01 1 20.00 NULL
2 2000-07-04 2 40.00 NULL
1 2002-08-01 3 20.00 2000-07-01
1 2007-01-01 4 60.00 2002-01-01
2 2010-05-09 5 70.00 2000-07-04
1 2012-06-25 6 35.00` 2007-01-01我试图使用以下代码:
SELECT CustomerID, Date, Amount, LAG(Date,1) OVER (PARTITIONED BY CustomerID ORDER BY Date)
FROM table但是,在SQLiteStudio中不支持滞后函数(或者我遗漏了什么?)。SQL编辑器也不识别分区BY子句。是否有方法在SQL函数编辑器中使用滞后函数或分区BY子句?任何帮助都将不胜感激!谢谢!
另外:在SQLiteStudio的SQLiteStudio中,有谁拥有创建聚合函数的资源吗?我知道它采用了“初始化代码”、“每步代码”和“最后一步实现代码”这三个参数,但我正在寻找SQLiteStudio中这三个参数的语法/要求的示例。(再次感谢!)
发布于 2021-01-05 03:34:54
正如上面粘贴的那样,分区子句有一个错误,应该是PARTITION BY,而不是PARTITIONED BY。如果这是唯一的问题,那么只需修复错误:
SELECT CustomerID, Date, Amount,
LAG(Date) OVER (PARTITION BY CustomerID
ORDER BY Date) AS "Last Transaction Date"
FROM yourTable
ORDER BY Date;如果上面的方法仍然不起作用,那么您的SQLite版本可能不支持LAG。在这种情况下,一个解决办法是使用关联子查询来代替LAG。
SELECT CustomerID, Date, Amount,
(SELECT t2.Date
FROM yourTable t2
WHERE t2.CustomerID = t1.CustomerID AND
t2.TransactionID < t1.TransactionID
ORDER BY t2.TransactionID DESC
LIMIT 1) AS "Last Transaction Date"
FROM yourTable t1
ORDER BY Date;https://stackoverflow.com/questions/65572831
复制相似问题