2017-03-06 2 views
1

SQLデータベースにこのテーブルを作成しました。別のフィールドで日付の順番が最大のデータを選択

index Reg_No Payment Payday 
1  S001  100  2017/01/01 
2  S001  500  2017/02/01 
3  S002  400  2017/01/01 
4  S002  1000  2017/11/01 

これをreg_noでグループ化し、最新の支払いのみを表示する必要があります。したがって、最終的な結果は次のようになります。

index Reg_No Payment Payday 
2  S001  500  2017/02/01 
4  S002  1000  2017/11/01 

どのようにしてこのためのSQLクエリを記述できますか。

+0

あなたはこれまでに何を思い付いていますか? –

+0

ここには、学生のすべての支払いが表示されます。レポートを印刷するためには、各生徒の最終支払明細の詳細を調べる必要があります。 @Stefano –

答えて

2
DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table 
(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY 
,reg_no CHAR(4) NOT NULL 
,payment INT NOT NULL 
,payday DATE NOT NULL 
); 

INSERT INTO my_table VALUES 
(1,'S001',100,'2017/01/01'), 
(2,'S001',500,'2017/02/01'), 
(3,'S002',400,'2017/01/01'), 
(4,'S002',1000,'2017/11/01'); 

SELECT x.* 
    FROM my_table x 
    JOIN 
    (SELECT reg_no 
      , MAX(payday) payday 
     FROM my_table 
     GROUP 
      BY reg_no 
    ) y 
    ON y.reg_no = x.reg_no 
    AND y.payday = x.payday; 
+----+--------+---------+------------+ 
| id | reg_no | payment | payday  | 
+----+--------+---------+------------+ 
| 2 | S001 |  500 | 2017-02-01 | 
| 4 | S002 | 1000 | 2017-11-01 | 
+----+--------+---------+------------+ 
2 rows in set (0.01 sec) 
+0

これは私のためにうまくいく、ありがとう –

-1

は、この日付形式の給料日列データ形式ですか、それともvarcharですか?

Reg_No

+0

給料日列は日付形式です。 –

+0

SELECT * FROMテーブル ここで(SELECT MAX(STR_TO_DATE(Payday、 '%m-%d-%Y'))) グループby Reg_No –

0
SELECT * FROM table group by Reg_No having max(Payday) 

Paydayによって(SELECT MAX(STR_TO_DATE(給料、 '%M-%のd-%Y')))のグループでなければなりませんテーブルから、このコード

SELECT *を試してみてください日付の種類の他に使用するフォーマット関数を日付に変換する

+0

max(payday)。ええ、本当ですか? – Strawberry

+0

はいこれはうまくいくはずですが、Payday = max(Payday)の場合は –

+0

になります。これは機能しないはずです。 – Strawberry

関連する問題