我得到了以下表格:
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
答案 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的记录相同。