2017-10-05 2 views
-1

テーブル内の列の1つが複数のレコードに対して同じ値を持ちますが、Date列には増分値がある場合があります。入力された最新のDateが不明な場合最新のレコードを表示するにはSQLを選択してください

ID| PAY_CODE| RATE | Date 
--------------------------------- 
1 | 1111 | 50 | 2017-01-01 
2 | 1111 | 50 | 2017-02-01 
3 | 1111 | 50 | 2017-03-11 
4 | 1111 | 50 | 2017-05-21 

にはどうすればいいだけの最新のレコードを印刷することができますか?

期待される結果:

ID| PAY_CODE| RATE | Date 
--------------------------------- 
4 | 1111 | 50 | 2017-05-21 

私は内部Date列を比較し、最高値(この場合は最新の日付)を返すSQLクエリを必要とする - これがさえ可能ですか?

答えて

2

私はこれは何をしたいんだと思う:あなたはつかむことを確認

SELECT id, pay_code, rate, date 
FROM (SELECT id, pay_code, rate, date, RANK() OVER (ORDER BY data DESC) AS rk 
     FROM mytable) t 
WHERE rk = 1 
+0

Th最新の日付に結ばれている場合は、複数の行が返されます。 – MT0

+0

@ MT0。 。 。 "Date列には増分値があります。" –

0
select t.* 
from (select * from table order by date desc) t 
where rownum < 2 
1

あなたはrankウィンドウ関数を使用することができます最新の結果、TOPを使用している他のソリューションは期待どおりに動作しませんでした

+0

これは、最新の日付で結ばれている場合は複数の行を返します。 'RANK'ではなく' ROW_NUMBER'を使用すると、単一の行だけが返されます。 – MT0

+0

@ MT0 OPが最新の日付から行を要求しました。私が理解している限り、複数の結果を可能にすることは意図された動作です。要求が実際にこれらの行のうちの1つだけを返すのであれば、 'row_number'が実際にこのトリックを行います。 – Mureinik

+0

OPは「どのように最新のレコードのみを印刷できますか」を要求しましたが、意図しているかどうかにかかわらず、' RANK'、 ROW_NUMBER'はそれを解決します。 – MT0

0

私はあなたがSELECT * FROM YOUR_TABLE T WHERE T.DATE = (SELECT MAX(DATE) FROM YOUR_TABLE)この方法を使うべきだと思う:

select t.* 
from t 
where t.date = (select max(t2.date) from t t2); 
関連する問題