我的表结构(在SQL Server中)看起来像这样:(D1比D2更新,PK是普通Identity(1,1)
列)
Name Type Score Date
A1 B1 C1 D1
A1 B2 C2 D1
A1 B1 C3 D2
我需要做的是找到Score
和Name
的每个唯一组合的最新Type
值,即:
A1 B1 C1 D1
A1 B2 C2 D1
我最初只是使用昨天的日期来完成这项工作,但并不是每天都会更新,所以有时会丢失分数。 我可以通过简单的
获得我需要看到的独特组合SELECT Name, Type FROM Table GROUP BY Name, Type ORDER BY MAX(Date)
但我显然无法添加其他两列,或者这些组不再是唯一的。
我已经看过类似的问题,但它们都有差异,这些差异使得它们对我来说没用。
非常感谢任何帮助。我有一种感觉,这是一个相当简单的问题,我只是不知道要弄清楚它!
答案 0 :(得分:6)
SELECT s.Name, s.Type, s.Score
FROM (
SELECT Name, Type, MAX(Date) AS MaxDate
FROM Scores
GROUP BY Name, Type
) m
INNER JOIN Scores s ON m.Name = s.Name AND m.Type = s.Type AND m.MaxDate = s.Date
答案 1 :(得分:2)
标准(ANSI)SQL解决方案:
SELECT name,
type,
score,
Date,
FROM (
SELECT name,
type,
score,
Date,
row_number() over (partition by name, type order by Date desc) as rn
FROM your_table
) t
WHERE rn = 1
根据您的DBMS,您可能需要引用列名“类型”和“日期”,因为它们是保留字。
答案 2 :(得分:0)
据我所知,实现这一目标的最佳方法是使用自联接,如果必须与数据库无关。
SELECT name, type, date, t2.score
FROM (SELECT name, type, MAX (date) date
FROM testdata
GROUP BY name, type) t1
JOIN
testdata t2 USING (name, type, date)