sql查询计算同一列的最小和最大日期之间的总天数

时间:2015-05-18 14:40:39

标签: mysql sql

表名 - 收据

coupondate - varchar

coupondate    customer      
 02-04-2015     A         
 02-05-2015     A         
 02-06-2015     A         
 02-07-2015     A        
 02-08-2015     A       
 02-09-2015     A  

 05-04-2015     B         
 05-05-2015     B         
 05-06-2015     B         
 05-07-2015     B        
 05-08-2015     B       
 05-09-2015     B    

我需要计算最小和最大优惠券之间的总天数。

FOR EX -

客户A的优惠券于2015年4月2日开始,于2015年9月2日结束。所以总天差为153天..

客户B的优惠券于2015年4月5日开始,于2015年9月5日结束。所以总天差为153天..

预期输出

customer     totaldiff
  A           153 days
  B           153 days

下面是我的SQL查询

 SELECT customer_name,        
           COUNT( coupondate ) AS totaldiff
    FROM receipt_entry
    GROUP BY customer_name

2 个答案:

答案 0 :(得分:1)

SELECT customer_name,
  DATEDIFF(MAX(coupondate), MIN(coupondate)) AS totaldiff
FROM receipt_entry
GROUP BY customer_name

根据您的评论进行编辑,以防coupondateVARCHAR 首先验证您的日期格式

SELECT customer_name,
  DATEDIFF(MAX(STR_TO_DATE(coupondate, '%d-%m-%Y')), 
           MIN(STR_TO_DATE(coupondate, '%d-%m-%Y'))) AS totaldiff
FROM receipt_entry
GROUP BY customer_name

答案 1 :(得分:0)

试试这个,看看你是否得到了预期的结果。

如果你知道你想要的日期:

SELECT customer_name, DATEDIFF(DAY, '02/04/2015', '5/9/2015') AS totaldiff
FROM receipt_entry
GROUP BY customer_name

如果你需要获得你的价值而不了解它们,你可以尝试这样的事情:

SELECT A.customer_name, 
DATEDIFF(DAY, (min(coupondate)), (max(coupondate))) AS totaldiff
FROM A.receipt_entry
GROUP BY A.customer_name
编辑:我错过了MySQL参考,对不起,以上是针对SQL Server的,这里是MySQL代码:

SELECT customer_name, 
DATEDIFF(min(coupondate)), max(coupondate)) AS totaldiff
FROM receipt_entry
GROUP BY customer_name

编辑2:日期格式:

SELECT customer_name, 
DATEDIFF(min(STR_TO_DATE(coupondate,'%d,%m,%Y')), max(STR_TO_DATE(coupondate,'%d,%m,%Y'))) AS totaldiff
FROM receipt_entry
GROUP BY customer_name
相关问题