2013-08-26 40 views
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中執行此操作?

+1

你可以[提琴架構](http://sqlfiddle.com/)。 – overflow

回答

0

如果你有API級別16(果凍豆)或更高版本,下面的工作:

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) 
相關問題