`假设我有一组包含2个字段的数据 - 类型和日期。我有兴趣找到(如果存在)各种类型的最大共同日期。在SQL或LINQ中这样做更容易吗?
鉴于以下数据,结果应为2018-02-01
,因为这是所有类型的最大公共日期。它没有这样的日期,因此没有返回数据。
Type, Date
---------
1,2018-03-01
1,2018-02-01
1,2018-01-01
2,2018-02-01
2,2018-05-01
2,2018-01-01
3,2018-01-01
3,2018-03-01
3,2018-02-01
答案 0 :(得分:3)
您可以使用:
SELECT TOP 1 [Date], COUNT(*) OVER(PARTITION BY Date) AS cnt
FROM tab
ORDER BY cnt DESC, [Date] DESC
<强> DBFiddle Demo 强>
答案 1 :(得分:2)
如果你有无限数量或不确定数量的类型,这将会起作用:
CREATE TABLE #Sample ([Type] int, [DAte] date);
INSERT INTO #Sample
VALUES
(1,'20180301'),
(1,'20180201'),
(1,'20180101'),
(2,'20180201'),
(2,'20180501'),
(2,'20180101'),
(3,'20180101'),
(3,'20180301'),
(3,'20180201');
GO
WITH EntryCount AS(
SELECT [Type], [Date],
COUNT(*) OVER (PARTITION By [Date]) AS Entries
FROM #Sample)
SELECT MAX(Date)
FROM EntryCount EC
WHERE Ec.Entries = (SELECT COUNT(DISTINCT sq.[Type]) FROM #Sample sq);
GO
DROP TABLE #Sample;
不确定它会有多快。
答案 2 :(得分:2)
示例强>
Select Top 1 [Date]
from YourTable
Group By [Date]
Order By count([Type]) desc,[Date] desc
<强>返回强>
2018-02-01
答案 3 :(得分:1)
这不是非常有效,无论你如何切片,因为你必须比较三组。假设您有3种类型,则可以使用自联接。这样的事情。
select MAX(YourDate)
from YourTable yt
join YourTable yt2 on yt2.YourType = 2 and yt.YourDate = yt2.YourDate
join YourTable yt3 on yt3.YourType = 3 and yt.YourDate = yt3.YourDate
where yt.YourType = 1