我有一张表格,我需要获取ID
一个组(基于ID
和Name
)COUNT(*) = 3
,最新一组时间戳。
因此,例如下面,我想要检索ID 2
。由于它有3行和最新的时间戳(即使ID 3
总体上有最新的时间戳,它的计数也不是3)。
但我不明白如何按Date
订购,因为我不能在Group By
条款中包含它,因为它不相同:
SELECT TOP 1 ID
FROM TABLE
GROUP BY ID,Name
HAVING COUNT(ID) > 2
AND Name = 'ABC'
--ORDER BY Date DESC
示例数据
ID Name Date
1 ABC 2015-05-27 08:00
1 ABC 2015-05-27 09:00
1 ABC 2015-05-27 10:00
2 ABC 2015-05-27 11:00
2 ABC 2015-05-27 12:00
2 ABC 2015-05-27 13:00
3 ABC 2015-05-27 14:00
3 ABC 2015-05-27 15:00
答案 0 :(得分:3)
在SQL Server中,您需要聚合不在列表中的列:
SELECT TOP 1 ID
FROM TABLE
WHERE Name = 'ABC'
GROUP BY ID,Name
HAVING COUNT(ID) > 2
ORDER BY MAX(Date) DESC
如果您确实需要,可以将名称过滤器放在组之前,以获得更好的性能。
答案 1 :(得分:0)
您可以在嵌套查询中执行此操作。
子查询:
SELECT ID
from TABLE
GROUP BY ID
HAVING Count(ID) > 2
它可以为您提供所需的ID。把它放在另一个查询中:
SELECT ID, Data
FROM Table
Where ID in (Subquery)
Order by Date DESC;
答案 2 :(得分:-1)
首先获取所有需要的ID。这是所有具有计数>的ID。 2.获取每个此类ID的最长日期。然后使用ROW_NUMBER对这些记录进行排名,给出最新的ID#1。最后删除所有未排名为#1的ID。
select name, id
from
(
select
name, id, row_count() over (partition by name order by max_date desc) as rn
from
(
select name, id, max(date) as max_date
from mytable
--where name = 'ABC'
group by name, id
having count(*) > 2
) wanted_ids
) ranked_ids
where rn = 1;