请参阅http://sqlfiddle.com/#!6/9254d/3/0
我有两个表,Person和Values,PersonID是它们之间的链接。 “值”表中的每个人每小时都有多个值。我需要为每个用户获取最新价值。我看了SO,我能找到的是获得MAX(ValueDate)然后加入,但不起作用。加入PersonID也不起作用,不知道还有什么可以尝试。
我需要的输出是
Name Value
1fn 1ln 2
2fn 2ln 20
3fn 3ln 200
我不需要最大的价值,我需要每个人的最新价值。如果您有任何想法,请分享。感谢。
答案 0 :(得分:1)
试试这个:
<强> SQLFIDDLEExample 强>
DECLARE @Org nvarchar(3)
SELECT @Org = 'aaa'
DECLARE @MyDate date
SELECT @MyDate = CONVERT(date, '2014-09-12')
SELECT a.Name,
a.Value as Revenue
FROM(
SELECT p.FName + ' ' + p.LName AS Name,
vt.Value,
ROW_NUMBER()OVER(PARTITION BY vt.PersonID ORDER BY vt.ValueDate desc) as rnk
FROM Person p
LEFT JOIN ValueTable vt
ON vt.PersonID = p.PersonID
WHERE vt.ValueDate < DATEADD(day,1,@MyDate)
AND vt.ValueDate >= @MyDate
AND vt.Org = @Org)a
WHERE a.rnk = 1
ORDER BY a.Name ASC
结果:
| NAME | REVENUE |
|---------|---------|
| 1fn 1ln | 2 |
| 2fn 2ln | 20 |
| 3fn 3ln | 200 |