ANSI SQL 按(印度)财政年度 YTD 分组 - (过去 5 年 YTD)

Posted

技术标签:

【中文标题】ANSI SQL 按(印度)财政年度 YTD 分组 - (过去 5 年 YTD)【英文标题】:ANSI SQL grouping by (Indian) financial year YTD - (last 5 years 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)

【问题讨论】:

【参考方案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。

以上是关于ANSI SQL 按(印度)财政年度 YTD 分组 - (过去 5 年 YTD)的主要内容,如果未能解决你的问题,请参考以下文章

如何在oracle sql developer中按年和月分组获取当前财政年度的数据?

Where 子句 (T-SQL) 中的财政年度迄今为止

按联邦财政年度重新排序月份

按4个不同级别和总数字字段分组

仅适用于当前财政年度日期的动态 SQL

返回财政年度的第一天(4 月 1 日)T-SQL