【问题标题】:SQL To get count for a particular date range [duplicate]SQL获取特定日期范围的计数[重复]
【发布时间】:2015-01-04 03:29:54
【问题描述】:

我想统计特定日期范围内未完成的订单

我的查询:

select COUNT(ORDER_ID)
from Atable
where
  ORDER_TYPE='INCOMPLETE' and   
  DATE BETWEEN '31-OCT-14' AND '07-NOV-14'

但 DATE 列是 TimeStamp

如何同时使用通配符和between

【问题讨论】:

  • 您使用的是哪个 RDBMS??
  • 你的列“DATE”是什么数据类型?
  • 不管你用的是哪个数据库,你用的是mysql、postgresql、litesql、oracle等吗?
  • 日期列数据类型为TIME STAMP,RDBMS为Oracle

标签: sql oracle


【解决方案1】:

当您使用带有类似字符串文字的 timestamp 列时,timestamp 会隐式转换为 varchar,并且按字典顺序执行比较 - 当然,这不是您想要的行为。 您可以使用to_timestamp 明确强制按您想要的方向投射:

SELECT COUNT(ORDER_ID) 
FROM   atable 
WHERE  order_type = 'INCOMPLETE'  AND
       "DATE" BETWEEN TO_TIMESTAMP('31-OCT-14', 'DD-MON-YY') AND 
                      TO_TIMESTAMP('07-NOV-14', 'DD-MON-YY')

编辑:
根据 cmets 中的说明,您需要在每天的结果中添加group by 子句:

SELECT   TO_TIMESTAMP("DATE", 'DD-MON-YY'), COUNT(ORDER_ID) 
FROM     atable 
WHERE    order_type = 'INCOMPLETE'  AND
         "DATE" BETWEEN TO_TIMESTAMP('31-OCT-14', 'DD-MON-YY') AND 
                        TO_TIMESTAMP('07-NOV-14', 'DD-MON-YY')
GROUP BY TO_TIMESTAMP("DATE", 'DD-MON-YY')

【讨论】:

  • 它工作了..但我想按天计算.. 31-oct 计数是 10,1-NOV 计数是 15 一样明智
  • @VivekShankar 你需要一个group by 子句 - 请参阅我的编辑详细信息。
【解决方案2】:

尝试如下时间戳:

SELECT COUNT(ORDER_ID) 
FROM Atable 
WHERE ORDER_TYPE='INCOMPLETE' 
AND   DATE BETWEEN 2014-10-31 00:00:01 AND 2014-11-07 23:59:59

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多