如何获得 SQLite 中多列的最大值?

Lod*_*ner 3 sql sqlite

我有一个包含 2 个表的 SQLite 数据库:albumphoto. 相册,基本上只是照片的集合,由photo. 每张照片都有 3 个时间戳:创建、更新、删除。

sqlite> SELECT id, title FROM album;

id          title
----------  ----------------
1           Beach party 2018
2           Dad's 60th birth

sqlite> SELECT id, album, ts_created, ts_updated, ts_deleted FROM photo;

id          album       ts_created  ts_updated  ts_deleted
----------  ----------  ----------  ----------  ----------
1           1           1538649250              1538649274
2           1           1538649250  1538649261
3           1           1538649250
4           1           1538649250  1538649267
5           1           1538649250  1538649267
6           2           1538649962
7           2           1538649962
Run Code Online (Sandbox Code Playgroud)

在应用程序中显示相册时,我想显示标题,以及最后一张照片“事件”(添加、编辑、删除等)的日期,例如

海滩派对 2018

编辑于:UTC 2018 年 10 月 4 日星期四 10:34:34

如何从photo表中的时间戳中获取此信息?

Lod*_*ner 6

使用max内置函数在这里有所帮助。从文档

请注意,当 max() 有 2 个或更多参数时,它是一个简单的函数,但如果只给出一个参数,则它作为聚合函数运行。

另请注意,由于我们的时间戳可以为 NULL,并且max如果任何值为 NULL 则返回 NULL,因此我们需要使用coalesceNULL 列来确保 NULL 列不会破坏外部max.

SELECT album.id,
       album.title,
       max(
           max(coalesce(photo.ts_created, 0)),
           max(coalesce(photo.ts_updated, 0)),
           max(coalesce(photo.ts_deleted, 0))
       ) AS ts_content
  FROM album,
       photo
 WHERE album.id = photo.album
 GROUP BY album.id;


id          title             ts_content
----------  ----------------  ----------
1           Beach party 2018  1538649274
2           Dad's 60th birth  1538649962
Run Code Online (Sandbox Code Playgroud)