【问题标题】:SQL - Most Common Day of Week QuerySQL - 最常见的星期查询
【发布时间】:2017-04-14 17:17:15
【问题描述】:

我正在尝试查询订单最多发生在一周中的哪一天。我写了一个返回结果的查询。但是,结果是,我相信,一周中的某一天可能基于大多数订单,但每个订单的天数,所以有几十个。我想知道如何只返回一天。

表格是:

Orders
 OrderID
 OrderDate

SELECT MAX(DAYNAME(OrderDate)) as WeekDay  
FROM Orders O
GROUP BY OrderDate
OrDER BY WeekDay DESC;

【问题讨论】:

  • 您使用的是什么数据库系统?答案非常依赖于此。

标签: sql date datepart


【解决方案1】:

您尝试编写的查询是:

SELECT TOP (1) DAYNAME(OrderDate) as WeekDay, COUNT(*)
FROM Orders O
GROUP BY DAYNAME(OrderDate)
OrDER BY COUNT(*) DESC;

虽然此查询似乎回答了您的问题,但您必须非常小心。毕竟,如果Orders 只有一天的数据,那么一周中的这一天将占主导地位。我的建议是从指定的周数(最好没有假期)中获取数据以获取此信息。

您的问题没有指定数据库(尽管我可以猜到)。具体的日期/时间逻辑取决于数据库。

【讨论】:

  • 感谢您的评论,但执行此操作时遇到问题。它说'WITH'在那个时候是无效的。我没有用过'WITH',而且我不熟悉它的语法。你能澄清一下它在做什么吗?
  • 我无法使用您的评论,但我尝试使用您的想法的另一种方法:SELECT MAX(DAYNAME(OrderDate)) as WeekDay, COUNT(*)' FROM Orders O GROUP BY DAYNAME(OrderDate) ORDER BY WeekDay DESC; SELECT MAX(DAYNAME(OrderDate)) as WeekDay, COUNT(*) FROM Orders GROUP BY DAYNAME(OrderDate) ORDER BY COUNT(*) DESC LIMIT 1; 这确实返回了一周中的天数,第二个查询返回了最多的一天订单,尽管周二和周四的数量相同。 (抱歉在这里格式化代码时遇到问题)
  • WITH TIES 并不重要。如果有平局,它只会返回所有最高的工作日。
猜你喜欢
  • 1970-01-01
  • 2014-08-04
  • 1970-01-01
  • 1970-01-01
  • 2019-02-13
  • 1970-01-01
  • 2016-08-16
  • 2012-08-27
相关资源
最近更新 更多