SQLiteStudio 中的 Lag() 函数
Lag() Function in SQLiteStudio
我想return按CustomerID 分组的最后交易日期,我正在使用SQLiteStudio 3.2.1。我的 table 看起来像这样:
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 编辑器也无法识别 PARTITION BY 子句。有没有办法在 SQL 函数编辑器中使用 LAG 函数或 PARTITION BY 子句?任何帮助将不胜感激!谢谢!
另外:有人有在 SQLiteStudio 的 SQL 函数编辑器中创建聚合函数的资源吗?我知道它需要“初始化代码”、“每步代码”和“最后一步实现代码”三个参数,但我正在寻找SQL中这三个参数的syntax/requirements示例项目工作室。 (再次感谢!)
您上面粘贴的分区子句有错字,应该是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;
我想return按CustomerID 分组的最后交易日期,我正在使用SQLiteStudio 3.2.1。我的 table 看起来像这样:
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 编辑器也无法识别 PARTITION BY 子句。有没有办法在 SQL 函数编辑器中使用 LAG 函数或 PARTITION BY 子句?任何帮助将不胜感激!谢谢!
另外:有人有在 SQLiteStudio 的 SQL 函数编辑器中创建聚合函数的资源吗?我知道它需要“初始化代码”、“每步代码”和“最后一步实现代码”三个参数,但我正在寻找SQL中这三个参数的syntax/requirements示例项目工作室。 (再次感谢!)
您上面粘贴的分区子句有错字,应该是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;