假设我们有一个包含id和date两列的表t:
+----+------------+
| id | date |
+----+------------+
| 1 | 2020-01-01 |
| 1 | 2020-01-02 |
| 2 | 2020-01-01 |
| 2 | 2020-01-03 |
| 2 | 2020-01-05 |
+----+------------+
我们想要按id分组,计算每个id对应的日期之间的天数。我们可以使用DATEDIFF和LAG函数。LAG函数返回前一行的值,因此我们可以计算当前行与前一行之间的天数差,以获得每个id对应的日期之间的天数。最终查询语句如下:
SELECT id, DATEDIFF(date, LAG(date) OVER (PARTITION BY id ORDER BY date)) AS days_between_dates
FROM t
查询结果如下:
+----+------------------+
| id | days_between_dates|
+----+------------------+
| 1 | NULL |
| 1 | 1 |
| 2 | NULL |
| 2 | 2 |
| 2 | 2 |
+----+------------------+
我们可以看到,这个查询按id分组,计算每个id对应的日期之间的天数,并在没有前一个值的情况下返回NULL。
上一篇:按ID分组,计算每行的累计总数