如何根据mysql中的2个日期来选择记录
问题描述:
我有一个表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格式只有月和年?
谢谢。
答
正如@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
你应该使用'Date'数据类型来存储日期。 –
预期结果集中出现金额“50.00”的逻辑是什么? –
我有72,000条雇主汇款记录。我们需要知道所有PRIVATE公司在2015年的适用期限内支付了多少汇款。这只是一个例子。我应该为示例添加更多记录吗? – Clorae