【问题标题】:List of count for each date每个日期的计数列表
【发布时间】:2014-07-17 21:52:22
【问题描述】:

我有特定的场景来显示每个日期的计数列表。以下是查询和我尝试过的内容。

我需要使用以下条件对每一天进行按日期计数。 (计数小于日期)

 SELECT COUNT(*) 
   FROM Queues (nolock)
  WHERE InsDateTime < '2014-05-27'

现在,如果我需要 UNION 多天,我需要使用它,如下所示。

 SELECT COUNT(*) 
   FROM Queues (nolock)
  WHERE InsDateTime < '2014-05-27'

  UNION

 SELECT COUNT(*) 
   FROM Queues (nolock)
  WHERE InsDateTime < '2014-05-26'

等等..

我需要在上述条件下动态计算每一天。我从哪里开始感到困惑。截至目前,我正在使用 union 多天来获得输出。

【问题讨论】:

  • 您应该学习如何使用GROUP BY 子句。 msdn.microsoft.com/en-us/library/ms177673.aspx
  • InsDateTime 是否包含时间?如果是这样,这将影响使用 GROUP BY InsDateTime 的答案
  • 我知道 GROUP BY - 这就是为什么由于查询混乱而发布问题的原因。
  • @Lamak 给出了正确的答案,显示了我指出的问题。
  • 您的查询可以通过使用 GROUP BY 子句轻松解决... Blam 的回答可以为您提供解决方案,除非我们没有正确理解您想要的输出。

标签: sql-server sql-server-2008 tsql


【解决方案1】:

因此,假设您希望从 5 月 1 日开始的每一天进行这些计算:

SELECT  A.InsDateTime,
        B.N
FROM (  SELECT DISTINCT CONVERT(DATE,InsDateTime) InsDateTime
        FROM dbo.Queues) A
OUTER APPLY (SELECT COUNT(*) N
             FROM dbo.Queues
             WHERE InsDateTime < A.InsDateTime) B
WHERE A.InsDateTime >= '20140501'

【讨论】:

    【解决方案2】:
    select d1.dt, count() 
      from queries d1 
      join queries d2
        on d2.dt < d1.dt 
       and d1.dt in ('2014-05-27', '2014-05-26')
     group by d1.dt 
     order by d1.dt
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-26
      • 1970-01-01
      • 2019-03-27
      • 2021-05-25
      • 2020-05-04
      • 1970-01-01
      • 2018-04-13
      相关资源
      最近更新 更多