2

我有一个我很清楚设计得很糟糕的访问数据库,不幸的是它是我必须使用的。它看起来有点像以下:

(行号不是数据库中的一列,它只是用来帮助我描述我所追求的)

Row#    ID       Date       Misc
1       001    01/8/2013      A
2       001    01/8/2013      B
3       001    01/8/2013      C
4       002    02/8/2013      D
5       002    02/8/2013      A
6       003    04/8/2013      B
7       003    04/8/2013      D
8       003    04/8/2013      D

我要做的是获取为最后 n 个(按日期)“条目”输入的所有信息,其中“条目”是具有唯一 ID 的所有行。

因此,如果我想要最后 1 个条目,我将获得第 6、7 和 8 行。最后两个条目将获得第 4-8 行等。

我试图在子选择中获取所需的 SN,然后选择出现这些 SN 的所有条目,但我无法让它工作。任何帮助表示赞赏。

谢谢。

4

2 回答 2

1

我认为这会起作用:

select * 
from table 
where Date in (
    select distinct(Date) as unique_date from table order by unique_date DESC limit <num>
)

这个想法是使用带有限制的子选择来仅识别您关心的日期。

编辑:某些数据库不允许子查询中的限制(我在看着你,mysql)。在这种情况下,您必须从子查询中创建一个临时表,然后从中选择 *。

于 2013-08-20T14:56:39.627 回答
1

正确的访问语法:

select * 
from t 
where ID in (select top 10 ID
             from t
             group by ID
             order by max([date]) desc
            )
于 2013-08-20T15:13:16.213 回答