根据时间选择前1作为不同的值

时间:2014-03-22 11:53:42

标签: ios sql database sqlite

我得到了以下表格:

tblMyFriends

ID     FriendID     GroupID      Public
1        F1                       YES
2        F2                       YES
3        F3                       NO
3                     G1          YES
4                     G2          YES
6        F4                       NO
7        F5                       YES
8                     G3          NO

tblMessages

ID     FriendID     GroupID      MyMessage     MyTime
1        F1                        A1            2 
2        F4                        A2            3
3        F1                        A3            1
3                     G2           Y1            1
4                     G2           Y2            3 
6        F3                        A4            3
7        F3                        A5            4
8                     G3           Y3            5
9        F4                        A6            5
10       F4                        A7            6

我需要获取最新消息(仅限前1),即减少时间顺序。 此外,我的列表中的朋友或组的剩余列表

因此,我将需要将返回以下输出的查询:

tblOutput

ID     FriendID     GroupID      MyMessage     MyTime
    1        F4                        A7            6 
    2                     G3           Y3            5
    3        F3                        A5            4
    4                     G2           Y2            3
    5        F1                        A1            2
    6        F2                                      0
    7        F5                                      0    
    8                     G2                         0

我正在使用SQLite

1 个答案:

答案 0 :(得分:0)

要获取没有消息的朋友/群组的记录,请使用outer join

要获得单个密钥,以便加入,请使用coalesce function。 (这要求空字段为NULL。)

要为每组记录获取一个结果记录,请使用GROUP BY:

SELECT tblMyFriends.FriendID,
       tblMyFriends.GroupID,
       tblMessages.MyMessage,
       MAX(tblMessages.MyTime)
FROM tblMyFriends
LEFT JOIN tblMessages
       ON COALESCE(tblMyFriends.FriendID, tblMyFriends.GroupID) =
          COALESCE(tblMessages.FriendID,  tblMessages.GroupID)
GROUP BY tblMyFriends.FriendID,
         tblMyFriends.GroupID

这需要SQLite 3.7.11或更高版本;否则,MyMessage值将不会与匹配MAX的记录相同。