如何生成按月存储的独特记录数

时间:2011-08-16 19:54:34

标签: sql sql-server tsql

我有一张桌子上有几张"票"记录在里面。每张票都按天存储(即2011-07-30 00:00:00.000)我想按年计算每个月的唯一记录我使用了以下sql语句

SELECT DISTINCT
   YEAR(TICKETDATE) as TICKETYEAR,
   MONTH(TICKETDATE) AS TICKETMONTH,
   COUNT(DISTINCT TICKETID) AS DAILYTICKETCOUNT
FROM
   NAT_JOBLINE
GROUP BY
   YEAR(TICKETDATE),
   MONTH(TICKETDATE)
ORDER BY
   YEAR(TICKETDATE),
   MONTH(TICKETDATE)

这确实产生了一个计数,但它错了,因为它每天都会获取唯一的门票。我只想要一个月的独特计数。

4 个答案:

答案 0 :(得分:0)

尝试将Year和Month组合到一个字段中,并对该新字段进行分组。 您可能必须将它们转换为varchar以确保它们不会简单地添加到一起。或者......你可以在一年中多次......

SELECT    
   (YEAR(TICKETDATE) * 100) + MONTH(TICKETDATE),
   count(*) AS DAILYTICKETCOUNT
FROM    NAT_JOBLINE GROUP BY
 (YEAR(TICKETDATE) * 100) + MONTH(TICKETDATE)

答案 1 :(得分:0)

假设TICKETID不是主键或唯一键,但在表NAT_JOBLINE中多次出现,则该查询应该有效。如果它是唯一的(每个值不超过1行),则需要在不同的列上进行选择,该列唯一标识要计数的“实体”,如果不是每个出现/实例/参考那个实体。

(与以往一样,如果不使用实际数据,很难判断。)

答案 2 :(得分:0)

我认为你需要删除第一个不同的。你已经有了这个小组。如果我是第一个Distict,我会对我应该做的事情感到困惑。

    SELECT 
      YEAR(TICKETDATE) as TICKETYEAR,
      MONTH(TICKETDATE) AS TICKETMONTH,
      COUNT(DISTINCT TICKETID) AS DAILYTICKETCOUNT
    FROM NAT_JOBLINE
    GROUP BY YEAR(TICKETDATE), MONTH(TICKETDATE) 
    ORDER BY YEAR(TICKETDATE), MONTH(TICKETDATE)

答案 3 :(得分:0)

从我对你的评论的理解到Phillip Kelley的解决方案:

SELECT TICKETDATE, COUNT(*) AS DAILYTICKETCOUNT
FROM  NAT_JOBLINE
GROUP BY TICKETDATE

应该这样做,但我建议你更新你的问题。

相关问题