按年月在Oracle SQL查询中基于日期排序的结果

huangapple go评论88阅读模式
英文:

Sorting result based on the date by year followed by month in oracle sql query

问题

Here is the translated code snippet:

  1. 我有这个查询来按Month_Year和计数格式分组和显示结果
  2. SELECT
  3. TO_CHAR (D_DATE, 'MON')
  4. || '_'
  5. || TO_CHAR (D_DATE, 'YYYY') Month_Year,
  6. COUNT (*) Request_Count
  7. FROM
  8. MY_TABLE WHERE V_TYPE='ABCD'
  9. GROUP BY
  10. TO_CHAR (D_DATE, 'MON') || '_' || TO_CHAR (D_DATE, 'YYYY')
  11. ORDER BY
  12. TO_CHAR (D_DATE, 'YYYY'), TO_CHAR (D_DATE, 'MON');

The code will now sort the output first by year and then by month as requested.

英文:

I have this query to group and show results in Month_yeat and count format.

  1. SELECT
  2. TO_CHAR (D_DATE,
  3. 'MON')
  4. || '_'
  5. || TO_CHAR (D_DATE,
  6. 'YYYY') Month_Year,
  7. COUNT (*) Request_Count
  8. FROM
  9. MY_TABLE WHERE V_TYPE='ABCD'
  10. GROUP BY
  11. TO_CHAR (D_DATE,
  12. 'MON') || '_' || TO_CHAR (D_DATE,
  13. 'YYYY')
  14. ORDER BY
  15. 1;

I require the output should be sorted based on the year first then month.
eg:
The current output is :

  1. MAR_2023 2223
  2. FEB_2023 433
  3. MAY_2022 10
  4. APR_2022 77

Required output is :

  1. FEB_2023 433
  2. MAR_2023 2223
  3. APR_2022 77
  4. MAY_2022 10

I know that this is sorting based on alphabetical if i give the condition in order by, but need a solution which can solve this problem
Note : grouping year and month as separate column and sorting on it is not acceptable.

答案1

得分: 1

你可以这样做,但需要额外添加group byorder by子句,例如:

  1. SELECT TO_CHAR (D_DATE, 'MON') || '_' || TO_CHAR (D_DATE, 'YYYY') Month_Year,
  2. COUNT (*) Request_Count
  3. FROM MY_TABLE
  4. WHERE V_TYPE = 'ABCD'
  5. GROUP BY TO_CHAR (D_DATE, 'MON') || '_' || TO_CHAR (D_DATE, 'YYYY'),
  6. TO_CHAR (d_date, 'yyyymm')
  7. ORDER BY TO_CHAR (d_date, 'yyyymm')
  • order by 确保行正确排序
  • group by 随后也需要(否则会出现“ORA-00979: not a GROUP BY expression”错误)
英文:

You can, but with additional part of group by and order by clause, e.g.

  1. SELECT TO_CHAR (D_DATE, 'MON') || '_' || TO_CHAR (D_DATE, 'YYYY') Month_Year,
  2. COUNT (*) Request_Count
  3. FROM MY_TABLE
  4. WHERE V_TYPE = 'ABCD'
  5. GROUP BY TO_CHAR (D_DATE, 'MON') || '_' || TO_CHAR (D_DATE, 'YYYY'),
  6. TO_CHAR (d_date, 'yyyymm')
  7. ORDER BY TO_CHAR (d_date, 'yyyymm')
  • order by will make sure that rows are correctly sorted
  • group by then requires it as well (otherwise you'll get "
    ORA-00979: not a GROUP BY expression" error)

答案2

得分: 0

将日期截断到月初,按照这个日期分组,然后按截断日期而不是格式化字符串排序。

  1. SELECT TO_CHAR(TRUNC(D_DATE, 'MM'), 'MON_YYYY') 月份_年份,
  2. COUNT (*) 请求数量
  3. FROM MY_TABLE
  4. WHERE V_TYPE='ABCD'
  5. GROUP BY TRUNC(D_DATE, 'MM')
  6. ORDER BY TRUNC(D_DATE, 'MM');

对于示例数据:

  1. CREATE TABLE my_table (v_type, d_date) AS
  2. SELECT 'ABCD', DATE '2022-01-01' + LEVEL FROM DUAL CONNECT BY LEVEL <= 19 UNION ALL
  3. SELECT 'ABCD', DATE '2023-01-01' + LEVEL FROM DUAL CONNECT BY LEVEL <= 12 UNION ALL
  4. SELECT 'ABCD', DATE '2023-02-01' + LEVEL FROM DUAL CONNECT BY LEVEL <= 5 UNION ALL
  5. SELECT 'ABCD', DATE '2023-03-01' + LEVEL FROM DUAL CONNECT BY LEVEL <= 7;

输出:

月份_年份 请求数量
JAN_2022 19
JAN_2023 12
FEB_2023 5
MAR_2023 7

fiddle

英文:

Truncate the date to the start of the month and group by that then order by the truncated date and not the formatted string.

  1. SELECT TO_CHAR(TRUNC(D_DATE, &#39;MM&#39;), &#39;MON_YYYY&#39;) Month_Year,
  2. COUNT (*) Request_Count
  3. FROM MY_TABLE
  4. WHERE V_TYPE=&#39;ABCD&#39;
  5. GROUP BY TRUNC(D_DATE, &#39;MM&#39;)
  6. ORDER BY TRUNC(D_DATE, &#39;MM&#39;);

Which, for the sample data:

  1. CREATE TABLE my_table (v_type, d_date) AS
  2. SELECT &#39;ABCD&#39;, DATE &#39;2022-01-01&#39; + LEVEL FROM DUAL CONNECT BY LEVEL &lt;= 19 UNION ALL
  3. SELECT &#39;ABCD&#39;, DATE &#39;2023-01-01&#39; + LEVEL FROM DUAL CONNECT BY LEVEL &lt;= 12 UNION ALL
  4. SELECT &#39;ABCD&#39;, DATE &#39;2023-02-01&#39; + LEVEL FROM DUAL CONNECT BY LEVEL &lt;= 5 UNION ALL
  5. SELECT &#39;ABCD&#39;, DATE &#39;2023-03-01&#39; + LEVEL FROM DUAL CONNECT BY LEVEL &lt;= 7;

Outputs:

MONTH_YEAR REQUEST_COUNT
JAN_2022 19
JAN_2023 12
FEB_2023 5
MAR_2023 7

fiddle

huangapple
  • 本文由 发表于 2023年4月19日 15:40:12
  • 转载请务必保留本文链接:https://go.coder-hub.com/76051874.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定