2016-10-22 126 views
0

我有一個表tbl_remit。如何根據mysql中的2個日期來選擇記錄

|RemitNo|id|emp|emp_loc| emp_cat |ap_from| ap_to |amount| 
| 1 |1 | a | PAL | PRIVATE |12/2015|12/2015| 50.00| 
| 2 |1 | a | PAL | PRIVATE |01/2016|01/2016|100.00| 
| 3 |1 | a | PAL | PRIVATE |02/2016|02/2016|100.00| 
| 4 |2 | b | BTG |GOVERNMENT|01/2016|01/2016|200.00| 
| 5 |2 | b | BTG |GOVERNMENT|02/2016|02/2016|200.00| 
| 6 |3 | c | MAR | PRIVATE |12/2015|12/2015| 50.00| 
| 7 |3 | c | MAR | PRIVATE |01/2016|01/2016|100.00| 
| 8 |3 | c | MAR | PRIVATE |02/2016|02/2016|100.00| 

我需要創建一個view_ap2015below,並從2015年及以下,其中emp_cat是私人和emp_loc組選擇它的所有匯款的總/總和。

我需要得到這張表。

|emp_loc| emp_cat |amount| 
| PAL | PRIVATE | 50.00| 
| MAR | PRIVATE | 50.00| 

我用這個聲明,但2016年匯款仍然存在。

SELECT Emp_loc, Emp_Cat, FORMAT(SUM(Amount),2) As Amount 
FROM tbl_remit 
WHERE AP_from <= '01/01/2015' AND AP_To <= '01/01/2015' AND Emp_Cat = 'PRIVATE' 
GROUP BY Emp_Loc 

是因爲日期的AP_From和AP_To格式只有月和年?

謝謝。

+4

你應該使用'Date'數據類型來存儲日期。 –

+1

預期結果集中出現金額「50.00」的邏輯是什麼? –

+0

我有72,000條僱主匯款記錄。我們需要知道所有PRIVATE公司在2015年的適用期限內支付了多少匯款。這只是一個例子。我應該爲示例添加更多記錄嗎? – Clorae

回答

4

正如@Giorgos指出的那樣,您似乎使用文本類型而不是日期類型來存儲日期。 從來沒有這樣做。但是,既然您已有,則可以使用STR_TO_DATE在進行比較時將文本轉換爲日期。

您遇到的另一個問題是您在GROUP BY查詢中選擇了非聚合列。

SELECT Emp_loc, Emp_Cat, FORMAT(MIN(Amount),2) As Amount 
FROM tbl_remit 
WHERE STR_TO_DATE(AP_from, '%m/%Y') <= '2015-01-01' AND 
     STR_TO_DATE(AP_to, '%m/%Y') <= '2015-01-01' AND 
     Emp_Cat = 'PRIVATE' 
GROUP BY Emp_Loc, Emp_Cat 
+0

是的,我做過。對不起,我會先清理我的記錄。但謝謝你這位先生:) – Clorae

+0

先生,這是什麼原因背後的GROUP BY Emp_Loc,Emp_Cat? – Clorae

+1

如果要選擇Emp_Cat,它必須出現在GROUP BY子句中,或者它必須位於聚合函數內。我選擇了前者,因爲這似乎是最有意義的。 –

0

ap_from和ap_to是DATE類型嗎? 然後試試這個

SELECT Emp_loc, Emp_Cat, FORMAT(SUM(Amount),2) As Amount 
FROM tbl_remit 
WHERE YEAR(AP_from) = 2015 AND YEAR(AP_To) = 2015 AND Emp_Cat = 'PRIVATE' 
GROUP BY Emp_Loc 
+1

似乎ap_from和ap_to是**不是**日期類型 – Sami

+0

是的它不是。我會先清理我的記錄並使用它。 – Clorae

相關問題