1

如果我有一个包含以下字段的表

ID, SomeFK, SomeTime

我将如何编写查询返回SomeTime每个SomeFK.

所以,结果可能看起来像

SomeFK    Sometime
0         2012-07-05 
0         2012-07-04 
0         2012-07-03 
1         2012-07-03 
1         2012-07-02 
1         2012-07-01 
2         2012-07-03 
2         2012-07-02 
2         2012-07-01 
....etc....

返回特定项目的最新项目SomeFK很容易,但我只是想不出如何为上述项目做。我也觉得应该很简单!

编辑:

抱歉,我错过了一些关键信息。这是针对SQL2000的,所以ROW_NUMBER()不能用!

4

3 回答 3

9
SELECT SomeFk, SomeTime 
FROM 
    (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY SomeFK ORDER BY sometime desc) rn
    FROM yourtable
    ) v
WHERE rn<=3
ORDER BY somefk, rn

对于 SQL 2000,我建议升级到受支持的平台。

但如果你坚持。

select *
from yourtable t1
where
    (select COUNT(*)
     from yourtable
     where somefk = t1.somefk
     and sometime>=t1.sometime
    ) <=3
于 2012-08-15T09:19:54.203 回答
0

我想我理解正确,你可以不选择maxSomeTime 然后分组,像这样:

select SomeFK, max(SomeTime) 
from Table
group by SomeFK

我在这里可能不合时宜,因为我不完全确定您所说的最新是什么意思。

于 2012-08-15T09:24:17.267 回答
0

基于此链接 (作为对原始问题的评论提供)。一种解决方案是:

SELECT DISTINCT ID, SomeFK, SomeTime
FROM SomeTable t1
WHERE ID IN (SELECT TOP 3 ID
               FROM SomeTable t2
              WHERE t2.SomeFK= t1.SomeFK
              ORDER BY SomeTime DESC)
ORDER BY SomeFK, SomeTime DESC

虽然我现在更喜欢接受的解决方案。

于 2012-08-15T09:56:36.187 回答