鉴于下表:
id message owner_id counter_party_id datetime_col
1 "message 1" 4 8 2014-04-01 03:58:33
2 "message 2" 4 12 2014-04-02 10:27:34
3 "message 3" 4 8 2014-04-03 09:34:38
4 "message 4" 4 12 2014-04-06 04:04:04
如何获取最新的counter_party号码,然后从该counter_party ID中获取所有消息?
输出:
2 "message 2" 4 12 2014-04-02 10:27:34
4 "message 4" 4 12 2014-04-06 04:04:04
我认为双重选择必须适用于此但我不确切知道如何执行此操作。
由于
答案 0 :(得分:3)
有很多方法可以做到这一点。 这是最直接的。
SELECT *
FROM YourTable
WHERE counter_party_id = (SELECT MAX(counter_party_id) FROM YourTable);
您也可以在手前选择MAX为变量;
DECLARE @m int
SET @m = (SELECT MAX(counter_Party_id) FROM YourTable);
在你的位置使用@m。
根据您使用的数据库系统,存在其他可以帮助您的工具。
答案 1 :(得分:2)
您可以获得最大counter_party_id
:
SELECT *
FROM table
WHERE counter_party_id = (
SELECT MAX(counter_party_id)
FROM table
)
答案 2 :(得分:2)
您可以使用子查询来获取最新的country_party_id,方法是首先按datetime_col排序列表,然后从中过滤第一个country_party_id。这是查询。
SELECT * FROM counter_party_id WHERE counter_party_id = (SELECT TOP 1 counter_party_id FROM counter_party_id ORDER BY datetime_col DESC)
答案 3 :(得分:1)
如果您使用的是SQL Server,请先尝试使用第二种方法
试试这个
SELECT * FROM
(
SELECT *,Row_Number() Over(Partition By counter_party_id Order By datetime_col DESC) RN
FROM YourTable
)
WHERE RN = 1
或:
SELECT * FROM YourTable S JOIN
(
SELECT counter_party_id,Max(datetime_col) FROM YourTable Group By counter_party_id
)T ON S.datetime_col = T.datetime_col
答案 4 :(得分:0)
SELECT MAX(counter_party_id ) AS counter_party_id,message,owner_id,datetime_col
FROM table;
答案 5 :(得分:0)
应该是最后一条消息,所以无论是max(id)还是最新的datetime,在这种情况下,counter_party_id只是一个用户id,最近的counter_party_id并不意味着最大的counter_party_id(我在答案中找到了解决方案而且我给了道具) :
SELECT *
FROM yourTable
WHERE counter_party_id = ( SELECT MAX(id) FROM yourTable )
或
SELECT *
FROM yourTable
WHERE counter_party_id = ( SELECT counter_party_id FROM yourTable ORDER BY m.time_send DESC LIMIT 1)
原因在于我简化了示例,但我必须在一个更复杂的方案中实现它。