SQLiteStudio 中的 Lag() 函数

问题描述

我想返回按 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 编辑器也无法识别 PARTITION BY 子句。有没有办法在 sql 函数编辑器中使用 LAG 函数或 PARTITION BY 子句?任何帮助将不胜感激!谢谢!

另外:是否有人在 sqliteStudiosql 函数编辑器中拥有任何用于创建聚合函数的资源?我知道它需要“初始化代码”、“每步代码”和“最终步骤实现代码”这三个参数,但我正在 sqliteStudio 中寻找这三个参数的语法/要求示例。 (再次感谢!)

解决方法

您在上面粘贴的分区子句有一个错字,它应该是 PARTITION BYnot 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,(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;

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...