我有下表
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
我想只选择那些最新状态为Up的字段,结果应该只是最后一行,因为fieldid:122的最新状态为'Down'。只有在状态有效时才能获得最大日期。
编辑:sql server 2008
答案 0 :(得分: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'
答案 1 :(得分:0)
很难看到所有要求。也许这就是你的意思?
SELECT fieldid, max(CreatedWhen)
FROM <youtable>
WHERE field_id not in (
-- exclude any field that has at least one 'Down'
SELECT DISTINCT fieldid
FROM <yourtable>
WHERE STATUS='Down'
)
GROUP BY fieldid
答案 2 :(得分:0)
SELECT TOP 1 * FROM MyTbl
WHERE Status = 'Up'
ORDER BY CreatedWhen DESC
答案 3 :(得分:0)
如果您使用的是SQL Server,请尝试
SELECT TOP 1 *
FROM <TABLE>
WHERE
STATUS = 'Up'
ORDER BY
CreatedWhen DESC
详情: TOP 1:只选择结果集的第一行 where子句只选择Status ='Up'的行 订单通过定义结果集的顺序。在这种情况下,DESC代表较新的行之前的旧行。所以第一个将是最后创建的