Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在mysql中根据2个日期选择记录_Mysql_Sql_Date_Group By_Where Clause - Fatal编程技术网

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

如何在mysql中根据2个日期选择记录,mysql,sql,date,group-by,where-clause,Mysql,Sql,Date,Group By,Where Clause,我有一张桌子要汇款 |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| |

我有一张桌子要汇款

|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|
我需要在下面创建一个视图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
选择Emp\u loc,Emp\u Cat,格式(总和(金额),2)作为金额
从tbl_汇款

正如@Giorgos所指出的,AP_from,您似乎使用文本类型而不是日期类型来存储日期。永远不要这样做。但是,由于您有,您可以在进行比较时使用
STR_TO_DATE
将文本转换为日期

您遇到的另一个问题是,您在
groupby
查询中选择了非聚合列

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
选择Emp\u loc、Emp\u Cat、格式(最小(金额)、2)作为金额
从tbl_汇款

正如@Giorgos所指出的,STR_TO_DATE(AP_from,'%m/%Y'),您似乎是在使用文本类型而不是日期类型存储日期。永远不要这样做。但是,由于您有,您可以在进行比较时使用
STR_TO_DATE
将文本转换为日期

您遇到的另一个问题是,您在
groupby
查询中选择了非聚合列

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
选择Emp\u loc、Emp\u Cat、格式(最小(金额)、2)作为金额
从tbl_汇款

其中STR_TO_DATE(AP_from,'%m/%Y')AP_from和AP_TO是日期类型? 那就试试这个

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

ap\U from和ap\U to是日期类型? 那就试试这个

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


您应该使用
Date
数据类型来存储日期。金额
50.00
显示在预期结果集中的逻辑是什么?我有72000条雇主汇款记录。我们需要知道在2015年之后的适用期限内,所有私人公司支付了多少汇款。这只是一个例子。我是否应该为示例添加更多记录?您的ap_from和ap_to列的类型是什么?我认为这些不是日期,因为
12/2015
在您的结果中不是日期格式。数据类型是VARCHAR您应该使用
date
数据类型来存储日期。金额
50.00
在预期结果集中出现的逻辑是什么?我有72000条雇主汇款记录。我们需要知道在2015年之后的适用期限内,所有私人公司支付了多少汇款。这只是一个例子。我是否应该为示例添加更多记录?您的ap_from和ap_to列的类型是什么?我认为这些不是日期,因为在您的结果中,
12/2015
不是日期格式。数据类型是varchar似乎是ap\u from和ap\u to不是日期类型是的。我会先清理我的记录并使用它。似乎ap_from和ap_to不是日期类型是的,它不是。我会先清理我的记录,然后用这个。是的,我用过。对不起,我会先清理我的记录。但是谢谢你,先生:)先生,Emp_Loc,Emp_Cat分组背后的原因是什么?如果你想选择
Emp_Cat
,它必须出现在
GROUP BY
子句中,或者必须在聚合函数中。我选择前者是因为这似乎最有意义。是的,我选择了。对不起,我会先清理我的记录。但是谢谢你,先生:)先生,Emp_Loc,Emp_Cat分组背后的原因是什么?如果你想选择
Emp_Cat
,它必须出现在
GROUP BY
子句中,或者必须在聚合函数中。我选择前者是因为这似乎最有意义。