2017-03-06 27 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?

試試這個代碼

SELECT * FROM表在哪裏(SELECT MAX(STR_TO_DATE(發薪日, '%間%D-%Y')))組由Reg_No

+0

發薪日欄是日期格式。 –

+0

SELECT * FROM表 其中(SELECT MAX(STR_TO_DATE(發薪日,'%m-%d-%Y'))) group by Reg_No –

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

Payday必須是日期類型其他使用格式化功能轉換成日期

+0

具有最大值(發薪日)。嗯,你確定? – Strawberry

+0

是的,這應該工作,如果沒有,那麼你可以去有發薪日=最大(發薪日) –

+0

不。這不應該工作,它不會。 – Strawberry

相關問題