2011-11-12 12 views
1

値リストに出力しました。日付と制限に基づいて値を特定します。

Name Date of Entry 
C1 - 1/1/2011 
C3 - 3/3/2011 
C2 - 2/2/2011  
C4 - 4/4/2011 
C5 - 5/5/2011 

上記のリスト数が5であると言う、私は2としてのキャップ数を持つので、任意の「Cの2より大きいを無効にする必要があり、無効にしようとしているCsは、エントリの日付に基づいて行われます。

ie。 (システムに最初に入力された)日付に基づいて古くなっているCを取り出します。この場合はC1とC2を有効にし、C3、C4 & C5を無効にする必要があります。

select * from table order by date; =>これにより、C1、C2、C3、C4、C5が得られます。

select * from table order by date limit 2; =>これは私にC1とC2を提供しますが、C3、C4、C5を無効にする必要があることをどのように知っていますか?

C3、C4、C5を無効にする必要があります。

1回のクエリで実行できますか?任意のMySQLの開発者の助け?

ありがとうございました。日付が一意であると仮定すると

+0

あなただけ無効にする必要があり、行の名前を選択しますか、またはあなたがテーブルの上に更新を実行したいですか? –

+0

アップデートはありません。無効にするものだけを知る必要があります。 – Sharpeye500

+0

日付は一意であることが保証されていますか? 2011年1月1日の日付が3つある場合はどうなりますか?ランダムに2つを削除しますか? –

答えて

2

、これを試してみてください。

SELECT 
    name, 
    date, 
    date > 
    (
     SELECT MIN(date) 
     FROM your_table 
     WHERE date > (SELECT MIN(date) FROM your_table) 
    ) AS disabled 
FROM your_table 
ORDER BY date 
+0

エラーコード:1235 このバージョンのMySQLはまだ 'LIMIT&IN/ALL/ANY/SOMEサブクエリ'をサポートしていません。5.2を使用しています。これはバージョン#に関連しているとは思われません。構文。 – Sharpeye500

+0

@ Sharpeye500:申し訳ありませんが、以前はテストしませんでした。更新された回答を試してみてください私はそれをテストし、それは動作するようです。 –

+0

これは非常に近いですが、私に正解を与えていません。 2011年1月1日 2011年2月2日 2011年3月3日 2011年4月4日 2011年5月5日 分の日付が2011年1月1日であれば、私はトップ2つまりを取得する必要があります。 2011年1月1日と2011年2月2日を有効にして、 3/3/2011,4/4/2011,5/5/2011を無効にする必要があります。すなわち、テーブルからの選択if(現在の行の日付> min(date)、1,0)を介して、これらのエントリに対して1と0のフラグを立てます。すなわち、私は論理を取得していると思う、シンタックスについてはわからないと思います。 – Sharpeye500

関連する問題