如何从日期表示为字符串的组中获取最新行

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