【问题标题】:sql query to count total days between min and max date from same columnsql查询计算同一列的最小日期和最大日期之间的总天数
【发布时间】:2015-05-18 14:40:39
【问题描述】:

表名 - 收据

优惠券 - 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 年 2 月 4 日开始,到 2015 年 2 月 9 日结束..所以总天数相差 153 天..

客户 B 的优惠券从 2015 年 5 月 4 日开始,到 2015 年 9 月 9 日结束..所以总天数相差 153 天..

预期输出

customer     totaldiff
  A           153 days
  B           153 days

下面是我的sql查询

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

【问题讨论】:

  • 您希望结果中有两列(customer 和 totaldiff),但您选择了 5 列。也许您应该只选择 customer_name, MAX( coupondate ) - MIN( coupondate ) ?
  • 是的,我只需要 2 列,但我需要的主要输出是 totaldifference ...
  • 总差异,独立于用户,还是每个用户?
  • 总差异基于每个用户或客户...

标签: mysql sql


【解决方案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

【讨论】:

  • 您的查询在 totaldiff 列上返回 NULL
  • 返回全部为空还是仅返回一些为空?您的表中是否有情侣日期的空值?
  • 确实很奇怪:-\
  • 您需要修改您的代码以在 datadiff 之前正确转换它们
  • @ankit ingle 不客气。如果可能,考虑更改coupondate数据类型,以避免查询内部的类型转换
【解决方案2】:

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

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

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

【讨论】:

  • 第二个查询不会返回正确的每个客户值。它将为每个人返回相同的差异。
  • 您的查询返回错误...#1582 - 调用本机函数 'DATEDIFF' 时的参数计数不正确
  • 我调整了代码以纠正Tim3880指出的错误,错误是因为我没有意识到它是MySQL,我从datediff函数中删除了'DAY,'。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-17
  • 1970-01-01
  • 1970-01-01
  • 2015-02-22
  • 1970-01-01
相关资源
最近更新 更多