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

最新のステータスが「上」のフィールドのみを選択したいのですが、fieldid:122の最新のステータスは「下」であるため、結果は最後の行のみになります。ステータスがアップしている場合にのみ最大日付を取得するようなものです。

編集: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'の行のみを選択します。順序は、結果セットの順序を定義します。この場合、DESCは新しい行の前の古い行を表します。したがって、最初のものが最後に作成されます

于 2012-06-22T07:47:16.660 に答える