如何 select 根据 mysql 中的 2 个日期记录
How to select records based on 2 dates in mysql
我有一个 table tbl_remit.
|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 和 select 2015 年及以下的所有汇款的 total/sum,其中 emp_cat 是私人的,并将其分组 emp_loc.
我需要得到这个 table。
|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
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
我有一个 table tbl_remit.
|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 和 select 2015 年及以下的所有汇款的 total/sum,其中 emp_cat 是私人的,并将其分组 emp_loc.
我需要得到这个 table。
|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
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