次のようなデータがあるとします。
Element Year
--------------
Elem1 2012
Elem1 2013
Elem1 2015
Elem2 2012
Elem2 2013
Elem3 2012
また、要素が 2 回出現すると要素が失敗します。T-SQL を使用して、失敗した各要素の失敗年を取得するにはどうすればよいですか?
Elem1 2013
Elem2 2013
編集イタリック体のテキストを追加
次のようなデータがあるとします。
Element Year
--------------
Elem1 2012
Elem1 2013
Elem1 2015
Elem2 2012
Elem2 2013
Elem3 2012
また、要素が 2 回出現すると要素が失敗します。T-SQL を使用して、失敗した各要素の失敗年を取得するにはどうすればよいですか?
Elem1 2013
Elem2 2013
編集イタリック体のテキストを追加
質問に対する私の理解では、任意の elem について、2 番目に低い日付の行を返したいということです。どちらの場合も日付が 2013 年だったので、この例は少しあいまいでした。正しく理解できれば、次のようになります。
select * from table_name as t where
(select count(*) from table_name where element = t.element and year < t.year) = 1
IE: 同じ要素で下位の年を持つ行の数が正確に 1 である各行を選択します。
より効率的な方法がある可能性が非常に高いですが、それはうまくいくはずです。(tsqlは便利ではありませんでしたが、mysqlのサンプルテーブルでテストしました。)
ここにあります。
SELECT *
FROM test
WHERE year IN(
SELECT year
FROM test
GROUP BY year
HAVING COUNT(1) = 2 )