根据上次修改状态选择记录

sha*_*bby 0 sql greatest-n-per-group

我有下表

fieldid  STATUS  CreatedWhen

122      Down    2012-05-16 14:26:56.263
122      Down    2012-05-16 14:26:56.250
122      Down    2012-05-16 14:26:56.233
122      Down    2012-05-16 14:26:56.217
122      Up      2012-05-16 14:26:56.200
54       Up      2011-10-07 10:19:33.873
Run Code Online (Sandbox Code Playgroud)

我想只选择那些最新状态为Up的字段,结果应该只是最后一行,因为fieldid:122的最新状态为'Down'.只有在状态有效时才能获得最大日期.

编辑:sql server 2008

Zan*_*ien 10

不确定您正在使用哪个DBMS,因为您没有指出,但这是一个与DBMS无关的解决方案,无论您使用的是哪个DBMS都应该可以使用:

SELECT
    a.fieldid
FROM
    (
        SELECT fieldid, MAX(CreatedWhen) AS maxdate
        FROM tbl
        GROUP BY fieldid
    ) a
INNER JOIN
    tbl b ON 
        a.fieldid = b.fieldid AND
        b.CreatedWhen = a.maxdate AND
        b.STATUS = 'Up'
Run Code Online (Sandbox Code Playgroud)