【问题标题】:ANSI SQL grouping by (Indian) financial year YTD - (last 5 years YTD)ANSI SQL 按(印度)财政年度 YTD 分组 - (过去 5 年 YTD)
【发布时间】:2022-01-06 22:23:10
【问题描述】:

谁能指出如何对印度财政(4 月至 3 月)截至今天(过去 5 年)的数据进行分组。例如,我需要从表 'aaa' 中提取过去 5 年从 4 月 1 日到今天的日期中的 'field1'、'field2'。我目前的解决方案可以安全运行到 12 月,但稍后会出错

SELECT
         "Date",
         "Daily data",
         "ID",
         "GA%",
         "MA%"
FROM  "table" 
WHERE    month("Date")  >= 4
 AND    month("Date")  <= month(today())
 AND    date("Date")  < date(today())
Expected result format grouped by fiscal years:
FY-1 sum(daily data during the period) sum(GA) sum(MA)
FY-2 sum(daily data during the period) sum(GA) sum(MA)

【问题讨论】:

    标签: mysql sql ansi-sql


    【解决方案1】:
    SELECT
             "Date",
             "Daily data",
             "ID",
             "GA%",
             "MA%"
    FROM  "table" 
    WHERE    
    "Date" between '2021-04-01' and '2021-11-29'
    OR
    "Date" between '2020-04-01' and '2020-11-29'
    OR
    "Date" between '2019-04-01' and '2019-11-29'
    OR
    "Date" between '2018-04-01' and '2018-11-29'
    OR
    "Date" between '2017-04-01' and '2017-11-29'
    

    【讨论】:

    • 对不起,但这不会给我预期的结果。这等于选择从 01-04-2017 到当前日期 (ytd) 的所有内容。此外,我需要将印度财政年度(比如 FY2017、FY2018 等)分组,印度财政年度从 4 月 1 日到 3 月 31 日。
    • 好的 - 但这不是你的问题所说的:“我需要在过去 5 年中从 4 月 1 日到 11 月 29 日提取......”。请根据您的确切要求更新您的问题,并提供一些示例数据以及您希望根据该示例数据实现的结果 - 所有这些都是可编辑的文本
    • 是的,已更新。希望这会有所帮助。
    【解决方案2】:

    未经测试的记事本涂鸦

    SELECT
      MIN(`Date`) AS StartDate
    , MAX(`Date`) AS EndDate
    , COUNT(ID) AS CountId
    , SUM(`GA%`) AS `TotalGa%`
    , SUM(`MA%`) AS `TotalMa%`
    FROM `table` AS aaa
    WHERE 
    (
      (YEAR(`Date`) BETWEEN YEAR(CURRENT_DATE) - 4 AND YEAR(CURRENT_DATE) - 1) 
      OR 
      (YEAR(`Date`) = YEAR(CURRENT_DATE) AND MONTH(`Date`) <= 11)
      OR
      (YEAR(`Date`) = YEAR(CURRENT_DATE) - 5 AND MONTH(`Date`) > 3)
    )
    AND 
    (
        MONTH(`Date`) NOT IN (12, 1, 2, 3)
        OR
        YEAR(`Date`) = YEAR(CURRENT_DATE)
    ) 
    GROUP BY CASE WHEN MONTH(`Date`) <= 3 THEN YEAR(`Date`) - 1
                  ELSE YEAR(`Date`) END
    ORDER BY MIN(`Date`) DESC
    

    【讨论】:

    • 感谢您的努力,但这不起作用。它将数据捕获限制在
    • 然后将WHERE子句中的&lt;= 3改为&lt;= 11。我试图确保完整的财政年度。
    • 再次抱歉,查询会提取 2016 年 4 月 1 日至 2021 年 11 月 30 日的所有数据,而我的要求必须排除 2020 年 12 月 16 日 17 日 18 月 19 日的所有部分, 20 年 1 月 17 日/18 月 19 日,20 年 2 月 17 日/18 月 19 日,20 年 3 月 17 日/18 月 19 日。简而言之 - 我试图在过去 5 年中将 YTD 分组为印度财政。印度财政从 4 月到 3 月运行
    • 我真的不明白你为什么要排除 4 个月。但我为它添加了一个额外的标准。
    • 不错,但是 GROUP BY 不是 ANSI SQL-92。
    猜你喜欢
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多