【问题标题】:How can I select years and quarters between 2 different years and 2 different quarters?如何在 2 个不同的年份和 2 个不同的季度之间选择年份和季度?
【发布时间】:2019-04-18 06:36:11
【问题描述】:

我有这张桌子:

year    | quarter
2018    | 1
2018    | 2
2018    | 3
2018    | 4
2019    | 1
2019    | 2
2019    | 3
2019    | 4

我需要从该表中选择 2018 年第 2 季度和 2019 年第 3 季度之间的所有数据

我发现只选择开始日期:

SELECT  *
FROM    [usa].[dbo].[tmpDate]
WHERE   year != 2018
OR      quarter >= 2

返回我:

year    | quarter
2018    | 2
2018    | 3
2018    | 4
2019    | 1
2019    | 2
2019    | 3
2019    | 4

应该选择什么来获得:

year    | quarter
2018    | 2
2018    | 3
2018    | 4
2019    | 1
2019    | 2
2019    | 3

【问题讨论】:

    标签: sql sql-server tsql


    【解决方案1】:

    一种可能的方法是使用yearquarter 值进行小计算:

    -- Table
    CREATE TABLE #Data (
       [year] int,
       [quarter] int
    )
    INSERT INTO #Data
       ([year], [quarter])
    VALUES   
       (2018, 1),
       (2018, 2),
       (2018, 3), 
       (2018, 4), 
       (2019, 1), 
       (2019, 2), 
       (2019, 3), 
       (2019, 4)
    
    -- Statement
    SELECT *
    FROM #Data
    WHERE ([year] * 10 + [quarter]) BETWEEN 20182 AND 20193
    ORDER BY [year], [quarter]
    

    输出:

    ----------------
    year    quarter
    ----------------
    2018    2
    2018    3
    2018    4
    2019    1
    2019    2
    2019    3
    

    【讨论】:

      【解决方案2】:

      您可以使用以下查询来获得您的预期结果:

      SELECT * 
      FROM [usa].[dbo].[tmpDate] 
      WHERE (year = 2018 AND quarter >= 2) OR
            (year = 2019 AND quarter <= 3);
      

      示例数据演示:

      DECLARE @TempData TABLE ([year] INT, [quarter] INT);
      
      INSERT INTO @TempData ([year], [quarter]) VALUES
      (2018, 1),
      (2018, 2),
      (2018, 3),
      (2018, 4),
      (2019, 1),
      (2019, 2),
      (2019, 3),
      (2019, 4);
      
      SELECT * 
      FROM @TempData
      WHERE ([year] = 2018 AND [quarter] >= 2) OR
            ([year] = 2019 AND [quarter] <= 3);
      

      输出:

      year    quarter
      ---------------
      2018    2
      2018    3
      2018    4
      2019    1
      2019    2
      2019    3
      

      【讨论】:

      • 如果结束日期更改为 2018 年和第 4 季度,它会起作用吗?
      • 是的,我们有([year] = 2019 AND [quarter] &lt;= 3);的OR条件,所以它不会返回2019年的记录
      • 结束日期更改为 2018 年和第 4 季度这是您的expectation 吗?
      • 是的@Arulkumar,如果我要更改开始日期或结束日期,该选择将如何变化?
      【解决方案3】:

      大括号在 WHERE 子句中起着重要作用。尝试以下方法,让我知道它是否有效:

      SELECT * 
      FROM YourTable 
      WHERE (year = 2018 AND quarter >= 2) 
            OR (year = 2019 AND quarter <= 3)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-31
        • 2022-01-12
        • 1970-01-01
        • 2018-05-21
        • 2020-04-28
        • 1970-01-01
        相关资源
        最近更新 更多