如何在SQL中按日期范围联接多个表?

萨姆布兰德

我对SQL比较陌生。而且我一直在努力地编写一个非常简单的查询,该查询返回一行。

我试图从几个不同的表中选择多个列值计数,每个计数都针对相同的日期范围。

我的数据库中的表类似于:

|   CreationDate      | LastName    | EventType    |
|:--------------------|------------:|:------------:| ...
| 2013-01-02 18:00:21 | Doe         |     2        |  
| 2013-01-07 18:00:24 | Blanks      |     2        | ...
| 2013-01-09 17:00:21 | Puccini     |     1        |

所有表都有一个相似的CreationDate列。

现在,我的查询是一个类似于以下内容的JOIN(似乎可行)。我正在尝试添加一个或多个JOIN,以便可以将每个表的多个计数返回到单行结果。我当前的查询:

DECLARE @startdate DATETIME = '##startdate##';
DECLARE @enddate DATETIME = '##enddate##';

SELECT  ISNULL(t2.Year, t1.Year) ,
        ISNULL(t2.Month, t1.Month) ,
        t1.LastName1 ,
        t2.LastName2
FROM    ( SELECT    DATEPART(year, table1.CreationDate) Year ,
                    DATEPART(month, table1.CreationDate) Month ,
                    COUNT(table1.column2) LastName1
          FROM      table1
          WHERE     EventType = 2
                    AND CreationDate BETWEEN @startdate AND @enddate
          GROUP BY  DATEPART(year, table1.CreationDate) ,
                    DATEPART(month, table1.CreationDate)
        ) AS t1

        JOIN 

             ( SELECT   DATEPART(year, table2.CreationDate) Year ,
                        DATEPART(month, table2.CreationDate) Month ,
                        COUNT(table2.column2) LastName2
               FROM     table2
               WHERE    EventType = 1
                        AND CreationDate BETWEEN @startdate AND @enddate
               GROUP BY DATEPART(year, table2.CreationDate) ,
                        DATEPART(month, table2.CreationDate)
             ) AS t2 ON t1.Year = t2.Year
                        AND t1.Month = t2.Month
ORDER BY t1.Year ,
        t1.Month

我可以添加更多JOIN吗?(我已经尝试过并且迷失了方向。)或者还有另一种方法来只返回每个选定列中指定日期范围内的COUNT(值)。

任何帮助,将不胜感激。

哈比卜
DECLARE @startdate DATETIME 
set @startdate= '2013-01-02 18:00:21.000';
DECLARE @enddate DATETIME 
set @enddate= '2013-01-09 17:00:21.000';


SELECT  YEAR ,
        MONTH ,
        [1] ,
        [2]
FROM    ( (SELECT    DATEPART(year, CreationDate) Year ,
                    DATEPART(month, CreationDate) Month ,
                    eventType ,
                    COUNT(LastName) namecount
          FROM      table1
          WHERE     CreationDate BETWEEN @startdate AND @enddate
          GROUP BY  DATEPART(year, CreationDate) ,
                    DATEPART(month, CreationDate) ,
                    EventType)
                    union all
          (SELECT    DATEPART(year, CreationDate) Year ,
                    DATEPART(month, CreationDate) Month ,
                    eventType ,
                    COUNT(LastName) namecount
          FROM      table2
          WHERE     CreationDate BETWEEN @startdate AND @enddate
          GROUP BY  DATEPART(year, CreationDate) ,
                    DATEPART(month, CreationDate) ,
                    EventType )         
        ) u PIVOT( SUM(namecount) FOR eventtype IN ( [1], [2] ) ) as pvt
ORDER BY Year ,
        Month

如果您想添加更多事件类型,只需在内部PIVOT()添加为[[1],[2],[3] ..)SELECT

添加任意数量的表。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

按日期范围联接表

来自分类Dev

按日期范围联接表

来自分类Dev

如何在Spark SQL中按日期范围过滤

来自分类Dev

按日期范围读取Hive表中的多个文件

来自分类Dev

如何根据日期范围联接这些表

来自分类Dev

SQL:如何按日期范围连接两个表

来自分类Dev

sql联接如何联接多个表

来自分类Dev

如何在SQL Server 2012中使用多个表进行外部交换联接?

来自分类Dev

如何在SQL Server 2008中将行更改为列(多个表,联接等)

来自分类Dev

如何在SQL中联接具有多个条件的表?

来自分类Dev

如何在SQL Server中联接多个表?

来自分类Dev

如何在SQL查询中提高多个联接表的性能

来自分类Dev

如何在Laravel的其他2个联接表上按日期排序表?

来自分类Dev

如何在SQL Server中的两个表中循环日期范围

来自分类Dev

如何在symfony2中联接多个表?

来自分类Dev

如何在SQL中的表中按组填写缺少的日期

来自分类Dev

sql按日期联接

来自分类Dev

SQL-如何在临时表中声明日期范围?

来自分类Dev

如何在R中按多个时间范围过滤?

来自分类Dev

如何在使用SQL Server 2012中的日历表上的联接的查询中显示缺少的日期

来自分类Dev

如何在两个表中按日期范围计算不同的用户总数和登录总数?

来自分类Dev

如何在两个表中按日期范围计算不同的用户总数和登录总数?

来自分类Dev

如何在PHP中检查多个日期范围之间的重叠?

来自分类Dev

如何在PHP中检查多个日期范围之间的重叠?

来自分类Dev

如何在SQL Server SELECT的第二个联接表中按ID选择每个记录的顶部?

来自分类Dev

如何在R中按日期平均多个变量?

来自分类Dev

SQL:如何在SQL Server中输出日期范围

来自分类Dev

如何在Symfony中联接多个表

来自分类Dev

如何在具有多个表联接的linq中执行左联接

Related 相关文章

  1. 1

    按日期范围联接表

  2. 2

    按日期范围联接表

  3. 3

    如何在Spark SQL中按日期范围过滤

  4. 4

    按日期范围读取Hive表中的多个文件

  5. 5

    如何根据日期范围联接这些表

  6. 6

    SQL:如何按日期范围连接两个表

  7. 7

    sql联接如何联接多个表

  8. 8

    如何在SQL Server 2012中使用多个表进行外部交换联接?

  9. 9

    如何在SQL Server 2008中将行更改为列(多个表,联接等)

  10. 10

    如何在SQL中联接具有多个条件的表?

  11. 11

    如何在SQL Server中联接多个表?

  12. 12

    如何在SQL查询中提高多个联接表的性能

  13. 13

    如何在Laravel的其他2个联接表上按日期排序表?

  14. 14

    如何在SQL Server中的两个表中循环日期范围

  15. 15

    如何在symfony2中联接多个表?

  16. 16

    如何在SQL中的表中按组填写缺少的日期

  17. 17

    sql按日期联接

  18. 18

    SQL-如何在临时表中声明日期范围?

  19. 19

    如何在R中按多个时间范围过滤?

  20. 20

    如何在使用SQL Server 2012中的日历表上的联接的查询中显示缺少的日期

  21. 21

    如何在两个表中按日期范围计算不同的用户总数和登录总数?

  22. 22

    如何在两个表中按日期范围计算不同的用户总数和登录总数?

  23. 23

    如何在PHP中检查多个日期范围之间的重叠?

  24. 24

    如何在PHP中检查多个日期范围之间的重叠?

  25. 25

    如何在SQL Server SELECT的第二个联接表中按ID选择每个记录的顶部?

  26. 26

    如何在R中按日期平均多个变量?

  27. 27

    SQL:如何在SQL Server中输出日期范围

  28. 28

    如何在Symfony中联接多个表

  29. 29

    如何在具有多个表联接的linq中执行左联接

热门标签

归档