如何从自带内连接的表中获取最新值

时间:2014-09-12 09:01:25

标签: tsql stored-procedures join

请参阅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

我不需要最大的价值,我需要每个人的最新价值。如果您有任何想法,请分享。感谢。

1 个答案:

答案 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 |