获取所有记录,但如果其中一些已连接,则只获取最后一个

时间:2013-08-26 09:58:45

标签: android sql sqlite

示例表

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中做到这一点?

1 个答案:

答案 0 :(得分: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)