【问题标题】:SQLite count of order per hourSQLite 每小时订单数
【发布时间】:2021-10-04 03:53:27
【问题描述】:

我手头只有 SQLite,我想用下面的表格计算每天每小时的订单数: orderID, order_datetime(yyyy-mm-dd hh:mm:ss), 位置

SELECT 
   DATEPART('%H', order_datetime) as 'HOUR',
   COUNT(*) as 'ORDERPERHOUR'
   FROM vanorder
   GROUP BY DATEPART('%H', order_datetime);

我收到错误“没有这样的功能:DATEPART”,我该如何在 sqlite 的世界中实现这一点?谢谢。

【问题讨论】:

  • 你搜索了吗?文档是quite clear
  • 澄清一下,您是希望同一小时任何一天的计数,还是每小时的细分一直?

标签: sql sqlite date count strftime


【解决方案1】:

在 SQLite 中,等价的使用 STRFTIME():

SELECT STRFTIME('%H', order_datetime) as hour
       COUNT(*) as ORDERPERHOUR
FROM vanorder
GROUP BY STRFTIME('%H', order_datetime);

如果你打算使用 SQLite,你应该熟悉 SQLite 函数。

【讨论】:

  • 直到 Sqlite 没有 date/datetime 类型 - and STRFTIME only works if you store dates in an ISO 8601 string (wtf?!) - 所以没有什么会自动停止 2021-02-31 61:99:61被存储。哎呀。
  • @dai 。 . .我不会为 SQLite 对日期/时间值的处理进行辩护。但是使用 SQLite 的人肯定应该熟悉该数据库中的功能。
  • 首先熟悉 SQLite 函数。您的代码在语法和逻辑上都是错误的。谁赞成这个?
【解决方案2】:

您可以使用具有正确语法和格式字符串的 SQLite 的 strftime() 函数:

SELECT strftime('%Y-%m-%d %H', order_datetime) hour,
       COUNT(*) ORDERPERHOUR
FROM vanorder
GROUP BY hour;

strftime('%Y-%m-%d %H', order_datetime) 对于像 '2021-07-28 15:32:12' 这样的时间戳将返回您想要的 2021-07-28 15

如果您希望看到像 '2021-07-28 15:00:00' 这样的值,请更改为:

strftime('%Y-%m-%d %H:00:00', order_datetime)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 2017-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-08
    • 2014-01-22
    相关资源
    最近更新 更多