実現したいこと
NO、NAME、DATEの三つの項目を持つテーブルからNAMEが重複しないようにデータを取得したいです。
取得時の条件は以下の2点です。
①NAMEが重複している場合、DATEが最新のものを取得する。
②NAMEもDATEも重複している場合はNOが大きいものを取得する。
NO | NAME | DATE | 取得したいレコード |
---|---|---|---|
1 | TEST1 | 2022/01/01 | |
2 | TEST1 | 2022/01/01 | ★ |
3 | TEST2 | 2022/02/01 | |
4 | TEST2 | 2022/03/01 | ★ |
5 | TEST3 | 2022/05/01 | ★ |
6 | TEST3 | 2022/04/01 | |
7 | TEST4 | 2022/06/01 | |
8 | TEST4 | 2022/08/01 | ★ |
9 | TEST4 | 2022/07/01 | |
10 | TEST5 | 2022/09/01 | |
11 | TEST5 | 2022/09/01 | |
12 | TEST5 | 2022/09/01 | ★ |
13 | TEST6 | 2022/10/01 | ★ |
★のついているレコードが今回取得したいレコードです。
SQL
1CREATE TABLE [dbo].[TEST_TABLE]( 2 [NO] [nchar](10) NULL, 3 [NAME] [nchar](10) NULL, 4 [DATE] [date] NULL 5)
SQL
1INSERT INTO TEST_TABLE VALUES 2('1','TEST1','2022/01/01'), 3('2','TEST1','2022/01/01'), 4('3','TEST2','2022/02/01'), 5('4','TEST2','2022/03/01'), 6('5','TEST3','2022/05/01'), 7('6','TEST3','2022/04/01'), 8('7','TEST4','2022/06/01'), 9('8','TEST4','2022/08/01'), 10('9','TEST4','2022/07/01'), 11('10','TEST5','2022/09/01'), 12('11','TEST5','2022/09/01'), 13('12','TEST5','2022/09/01'), 14('13','TEST6','2022/10/01')
現状
SQL
1SELECT * FROM TEST_TABLE A 2WHERE EXISTS(SELECT 1 FROM TEST_TABLE B 3 WHERE A.NAME = B.NAME 4 AND A.DATE > B.DATE 5 6 ) 7 AND EXISTS(SELECT 1 FROM TEST_TABLE C 8 WHERE A.NAME = C.NAME 9 AND A.NO > C.NO 10 )
調べながらSELECT文を書いてみましたが、思うようにデータが取得できません。
上記のSELECT文では3行しか取得できない上に「TEST4」が重複してしまいます。
NO | NAME | DATE |
---|---|---|
4 | TEST2 | 2022/03/01 |
8 | TEST4 | 2022/08/01 |
9 | TEST4 | 2022/07/01 |
どのようにすれば条件を満たして取得できるでしょうか。
ご教示お願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2022/07/15 22:13