如何 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