1

示例表

id | parentId | desc | date
1  |   null   | .... |  1
2  |   null   | .... |  2
3  |    1     | .... |  3
4  |    1     | .... |  4
5  |    2     | .... |  5
6  |   null   | .... |  6
7  |   null   | .... |  7

好的,现在我想获取所有记录,但如果其中一些记录是通过 id <-> parentId 连接的,那么我只想要最新日期的记录。上表的查询结果为

id | parentId | desc | date
4  |    1     | .... |  4
5  |    2     | .... |  5
6  |   null   | .... |  6
7  |   null   | .... |  7

我怎么能在 sqllite 中做到这一点?

4

1 回答 1

0

如果您的 API 级别为 16(Jelly Bean)或更高版本,则以下内容将起作用:

SELECT id,
       parentId,
       "desc",
       MAX(date) AS date
FROM MyTable
GROUP BY COALESCE(parentId, id)

在较旧的 Android 版本中,您必须使用相关子查询来过滤掉日期较早的记录:

SELECT *
FROM MyTable
WHERE NOT EXISTS (SELECT 1
                  FROM MyTable AS T2
                  WHERE COALESCE(T2.parentId,      T2.id     ) =
                        COALESCE(MyTable.parentId, MyTable.id)
                    AND T2.date > MyTable.date)
于 2013-08-26T10:15:00.640 回答