0

我有下表

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”。仅当状态为 up 时才获得最大日期之类的东西。

编辑:sql server 2008

4

4 回答 4

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'
于 2012-06-22T07:49:09.940 回答
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
于 2012-06-22T07:41:58.597 回答
0
SELECT TOP 1 * FROM MyTbl
WHERE Status = 'Up'
ORDER BY CreatedWhen DESC
于 2012-06-22T07:43:59.750 回答
0

如果您使用的是 SQL 服务器,请尝试

SELECT TOP 1 *
FROM <TABLE>
WHERE 
    STATUS = 'Up'
ORDER BY
    CreatedWhen DESC

详细说明: TOP 1:仅选择结果集的第一行 where 子句仅选择 Status = 'Up' 的行 The order by 定义结果集的顺序。在这种情况下,DESC 在新行之前代表旧行。所以第一个将是最后一个创建的

于 2012-06-22T07:47:16.660 回答