2

我有一个具有以下结构的表。

LocId    Value1    Value1Date                
.............................................
1        50        2012-10-20 14:21:00.000      
1        70        2012-10-21 14:21:00.000      
1        90        2012-10-22 14:21:00.000      
1        100       2012-10-23 14:21:00.000    
2        20        2012-10-20 14:21:00.000       
2        40        2012-10-21 11:21:00.000      
2        70        2012-10-22 14:21:00.000     
2        80        2012-10-23 14:21:00.000 
3        50        2012-10-20 14:21:00.000       
3        70        2012-10-21 11:21:00.000      
3        80        2012-10-22 14:21:00.000      
3        90        2012-10-23 14:21:00.000

我想要实现的是,对于每个 [LocId],我需要最新日期时间(即 2012-10-23)的 [Value1]。返回的表应如下所示:

LocId    Value1    Value1Date                
.............................................
1        100       2012-10-23 14:21:00.000
2        80        2012-10-23 14:21:00.000
3        90        2012-10-23 14:21:00.000

有人可以帮忙吗?谢谢

4

4 回答 4

7

您可以像这样在分区上使用排名:

select * from
(select locid, value1, value1date, 
  rank() over (partition by locid order by value1date desc) as rank
  from table1) t
where t.rank=1

SqlFiddle

于 2013-03-14T02:25:19.573 回答
2

这种方法会奏效。

select locid, value1, value1date
from yourtable join
(select locid id, max(value1date) maxdate
from yourtable
group by locid) temp on id = locid 
and value1date = maxdate
于 2013-03-14T02:19:34.830 回答
2

这可以通过使用Common Table ExpressionWindow Function

WITH records
AS
(
    SELECT  LocID, VAlue1, Value1Date,
            ROW_NUMBER() OVER (PARTITION BY LocID ORDER BY Value1Date DESC) rn
    FROM    TableName
)
SELECT  LocID, VAlue1, Value1Date
FROM    records
WHERE   rn = 1
于 2013-03-14T02:15:33.937 回答
0

这是执行您要查找的内容的 mysql 查询。我真的不知道其他 SQL。

SELECT * FROM table WHERE LocID = n ORDER BY Value1Date DESC LIMIT 1;

如果您从程序中查询,您可以使用:

SELECT LocID FROM table ORDER BY LocID DESC LIMIT 1;

获取 ID 的总数(假设它们是连续的),然后将其放入循环中以获取所有最近的日期。

希望有帮助。

于 2013-03-14T02:20:26.417 回答