zoukankan      html  css  js  c++  java
  • 一个统计报表sql问题

    今天朋友问我了一个统计报表的sql问题。我弄了好久。终于算是写出来了。这里记录下。

    问题:

     id--------------name--------------addtime
    1                       a                      2014-01-01 02:30:21
    1                       b                      2014-01-03 03:20:02
    1                       c                      2014-01-03 06:10:30
    1                       d                      2014-01-06 11:30:15
    1                       e                      2014-01-06 11:10:18
    1                       f                       2014-01-06 12:30:19
    想要达到查询结果:
    addtime---------------count
    2014-01-01                  1
    2014-01-02                  0
    2014-01-03                  2
    2014-01-04                  0
    2014-01-05                  0
    2014-01-06                  3
     
    主要难点是:2014.1.2 这天没有数据,怎么按照这种日期排序呢?
    最终的思路是:先生成日期的临时表,再根据日期的临时表进行排序。
    我根据朋友的需求,创建的表:
    表数据:
    代码:
    --删除临时表
    DROP TABLE #tempDate
    --创建临时表
    CREATE TABLE #tempDate(CreateTime DATETIME)
    --设置起始时间
    DECLARE @startTime DATETIME
    DECLARE @endTime DATETIME
    SET @startTime='2015-3-10'
    SET @endTime='2015-4-28'
    --生成日期数据
    WHILE @startTime<@endTime
    BEGIN
        INSERT INTO #tempDate
                ( CreateTime )
        VALUES  ( CAST(DATEPART(yy,@startTime) AS NVARCHAR(13))+'-'+
        CAST(DATEPART(mm,@startTime) AS NVARCHAR(13))+'-'+
        CAST(DATEPART(dd,@startTime) AS NVARCHAR(13))  -- CreateTime - datetime
                  )
        SET @startTime=DATEADD(dd,1,@startTime)
        CONTINUE
    END
    
    --查询统计结果
    SELECT #tempDate.CreateTime,COUNT(b.CreateTime) SumCount  FROM #tempDate LEFT JOIN
    TestTable1
    b
    ON (CAST(DATEPART(yy,#tempDate.CreateTime) AS NVARCHAR(13))+'-'+
        CAST(DATEPART(mm,#tempDate.CreateTime) AS NVARCHAR(13))+'-'+
        CAST(DATEPART(dd,#tempDate.CreateTime) AS NVARCHAR(13))) = (CAST(DATEPART(yy,b.CreateTime) AS NVARCHAR(13))+'-'+
        CAST(DATEPART(mm,b.CreateTime) AS NVARCHAR(13))+'-'+
        CAST(DATEPART(dd,b.CreateTime) AS NVARCHAR(13)))
     
  • 相关阅读:
    max-points-on-a-line
    evaluate-reverse-polish-notation
    minimum-depth-of-binary-tree
    ML&MLDS笔记:偏差 vs 方差
    机器人的运动范围
    矩阵中的路径
    滑动窗口的最大值
    数据流中的中位数
    1.微服务架构设计(英文-起源)
    5.如何复制一个文件(编程)
  • 原文地址:https://www.cnblogs.com/woaic/p/4450253.html
Copyright © 2011-2022 走看看