No2ですが、以前の質問の回答を利用すると、これで
同一コードで日付が重複していても問題なさそうですね。
こんなことできるのか。。。勉強になった。
SELECT DISTINCT ON (コード) コード , 枝番 , 年月日 FROM テーブル
WHERE (コード , 年月日) IN
(SELECT COALESCE(A.コード,B.コード) AS コード,
COALESCE(A.年月日,B.年月日) AS 年月日 FROM
(SELECT コード,MIN(年月日) AS 年月日 FROM テーブル
WHERE 優先='優先する' GROUP BY コード) AS A
FULL OUTER JOIN
(SELECT コード,MIN(年月日) AS 年月日 FROM テーブル
WHERE 優先='優先しない' GROUP BY コード) AS B
ON A.コード=B.コード
)
こんな感じでどうでしょう?
同一コードでの年月日は重複しないのが前提条件です。
SELECT C.* FROM テーブル AS C
INNER JOIN
(
SELECT COALESCE(A.コード,B.コード) AS コード,
COALESCE(A.年月日,B.年月日) AS 年月日 FROM
(SELECT コード,MIN(年月日) AS 年月日 FROM テーブル
WHERE 優先='優先する' GROUP BY コード) AS A
FULL OUTER JOIN
(SELECT コード,MIN(年月日) AS 年月日 FROM テーブル
WHERE 優先='優先しない' GROUP BY コード) AS B
ON A.コード=B.コード
) AS D
ON C.コード=D.コード AND C.年月日=D.年月日
こんなのしか思いつかないです。
あまり良いクエリでは無いですが。。
SELECT *
FROM テストテーブル A
WHERE A. 年月日 =
( SELECT MIN(B. 年月日)
FROM テストテーブル B
WHERE A. コード = B. コード
AND B. 優先 = '優先する'
)
OR A. 年月日 =
( SELECT MIN(C. 年月日)
FROM テストテーブル C
WHERE A. コード = C. コード
AND NOT EXISTS
( SELECT *
FROM テストテーブル D
WHERE D. 優先 = '優先する'
AND C. コード = D. コード
)
)
お礼
お礼が遅くなり申し訳ございません。 ご回答有難うございます。 上記のSQLで意図している内容を取得する事が出来ました。 非常に勉強になりました。 まだまだSQLの勉強をしなければいけないと思いました・・・・