如何从日期表示为字符串的组中获取最新行
How to get just the newest row from a group where the date is expressed as a string
我有一个使用 sqlite3 的数据库,其中一列将日期(rfc3339 格式)存储为文本。
我的数据库正在存储各种对象的每日值。在下面的示例中,A 和 B.
id
obj
date
value
13
A
2022-05-22T20:02:20.465515Z
413
223
A
2022-05-23T09:23:39.591774Z
517
25
B
2022-05-22T20:02:20.469512Z
963
948
B
2022-05-23T09:23:39.600809Z
1124
我想做的是 select 只是每个对象的最新日期。对象在另一个数据库中被引用。期望的结果是:
id
obj
date
value
223
A
2022-05-23T09:23:39.591774Z
517
948
B
2022-05-23T09:23:39.600809Z
1124
如果对象 A、B、C 有数百个条目...我如何才能 select 每个对象只取最新的条目? (即按 obj 列上的值分组)
您可以使用ROW_NUMBER()
函数,例如
SELECT id, obj, date, value
FROM ( SELECT t.*,
ROW_NUMBER() OVER
(PARTITION BY obj
ORDER BY strftime('%Y-%m-%dT%H:%M:%S.%fZ', date) DESC) AS rn
FROM t ) AS tt
WHERE rn = 1
简单聚合:
SELECT id, obj, MAX(date) AS date, value
FROM tablename
GROUP BY obj;
SQLite returns 每个 obj
具有最新 date
的行。
供参考:Bare columns in an aggregate query
我有一个使用 sqlite3 的数据库,其中一列将日期(rfc3339 格式)存储为文本。
我的数据库正在存储各种对象的每日值。在下面的示例中,A 和 B.
id | obj | date | value |
---|---|---|---|
13 | A | 2022-05-22T20:02:20.465515Z | 413 |
223 | A | 2022-05-23T09:23:39.591774Z | 517 |
25 | B | 2022-05-22T20:02:20.469512Z | 963 |
948 | B | 2022-05-23T09:23:39.600809Z | 1124 |
我想做的是 select 只是每个对象的最新日期。对象在另一个数据库中被引用。期望的结果是:
id | obj | date | value |
---|---|---|---|
223 | A | 2022-05-23T09:23:39.591774Z | 517 |
948 | B | 2022-05-23T09:23:39.600809Z | 1124 |
如果对象 A、B、C 有数百个条目...我如何才能 select 每个对象只取最新的条目? (即按 obj 列上的值分组)
您可以使用ROW_NUMBER()
函数,例如
SELECT id, obj, date, value
FROM ( SELECT t.*,
ROW_NUMBER() OVER
(PARTITION BY obj
ORDER BY strftime('%Y-%m-%dT%H:%M:%S.%fZ', date) DESC) AS rn
FROM t ) AS tt
WHERE rn = 1
简单聚合:
SELECT id, obj, MAX(date) AS date, value
FROM tablename
GROUP BY obj;
SQLite returns 每个 obj
具有最新 date
的行。
供参考:Bare columns in an aggregate query