如何根据mysql中的2个日期选择记录

时间:2016-10-22 08:50:16

标签: mysql sql date group-by where-clause

我有一个表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_ap2015,然后选择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格式只是月份和年份?

谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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