SQL查询如何在Oracle / Hive中获取每周/每年的最后一个工作日?

用户名

假设我有test_data以下示例数据,每周有1-5天,数据库中有数据(> = 1天,“有数据”,<= 5天):

    code     vol    val      num     test_date
   --------------------------------------------
1   00001    100    0.1      111      20191104
2   00001    100    0.1      111      20191105
3   00001    100    0.1      111      20191106
4   00001    100    0.1      111      20191107
5   00001    100    0.1      111      20191108
7   00001    100    0.1      111      20191111
8   00001    200    0.1      222      20191112
9   00001    200    0.1      111      20191113
10  00001    400    0.3      222      20191114
11  00001    200    0.2      333      20191118
12  00002    100    0.1      111      20191104
13  00002    200    0.1      222      20191105
14  00002    200    0.1      111      20191106
15  00002    400    0.3      222      20191107
16  00002    200    0.2      333      20191108
....................
....................

我想总结volumenumbervalue通过周/年code,现在我可以通过下面的SQL查询来概括他们,但根据我不能让一个星期的最后一天test_date,在最后一天可能是一个星期内的任何一天或一年(由于工作/工作日),我们需要显示最后一个日期列

SELECT t.code
        ,date_add(concat_ws('-',substr(t.test_date,1,4),substr(t.test_date,5,2),substr(t.test_date,7,2)) ,
            -pmod(datediff(concat_ws('-',substr(t.test_date,1,4),substr(t.test_date,5,2),substr(t.test_date,7,2)),'1990-01-01'),7)) AS test_date
        ,sum(t.number) AS num
        ,sum(t.volume) AS vol
        ,sum(t.value) AS val
FROM test_data t
GROUP BY t.code, test_date

现在我的输出如下:

    code     vol    val      num     test_date(monday)
   ----------------------------------------------------
1   00001    500    0.5      555      20191104
2   00001    900    0.6      666      20191111
3   00001    200    0.1      111      20191118
4   00001    400    0.3      222      20191125
5   00001    200    0.2      333      20191202

但是我的预期输出如下:

    code     vol    val      num     test_date(the last date of week in database)
   -------------------------------------------------------------------------------
1   00001    500    0.5      555      20191108
2   00001    900    0.6      666      20191114
3   00001    200    0.1      111      20191122
4   00001    400    0.3      222      20191129
5   00001    200    0.2      333      20191206

非常感谢您的任何建议。

拉达加斯特81

我认为以下是您想要的:

SELECT t.code
     , max(t.test_date) AS test_date
     , sum(t.number) AS num
     , sum(t.volume) AS vol
     , sum(t.value)  AS val
FROM test_data t
GROUP BY t.code, TRUNC(TO_DATE(t.test_date,'RRRRMMDD'),'IW')

我只是缩短了方程式,使用TO_DATE来计算一周中的第一天TRUNC然后,您只需选择test_date每个组的最大值即可,这是本周中存在数据的最后一天。

如果您只想一周中的最后一天,不管是否有数据,只需将相应的天数添加到开始日期,例如TRUNC(TO_DATE(t.test_date,'RRRRMMDD'),'IW') + 6星期日。

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

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

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在熊猫中选择“每月的最后一个工作日”?

来自分类Dev

如何在最后一个工作日自动构造带零的日期时间格式

来自分类Dev

如何使用SQL查找本月的最后一个工作日

来自分类Dev

n 个月前的最后一个工作日 SQL

来自分类Dev

如何使用`business_time` gem获得一个月的最后一个工作日

来自分类Dev

如何在Jira JQL中过滤上一个工作日

来自分类Dev

如何在Powershell中获得下一个工作日

来自分类Dev

SQL Server:递归函数以获取上一个工作日

来自分类Dev

如何在Oracle SQL查询中编写mysql TIMESTAMPDIFF函数

来自分类Dev

如何在Oracle中使用PL / SQL或SQL查询将新行插入查询结果中?

来自分类Dev

如何在cron中每个月的第一个工作日运行脚本?

来自分类Dev

oracle sql:计算一个月中工作日的有效方法

来自分类Dev

计算一个工作日的小时数,该工作日分为2天-Access SQL

来自分类Dev

Oracle (SQL):如何获取 SQL 查询语法

来自分类Dev

如何在下一个工作日更新mysql日期列字段?

来自分类Dev

时间序列如何向后重新采样,例如从最后一个数据日期开始的5个工作日?

来自分类Dev

如何在Oracle PL / SQL查询中动态获取字段名称?

来自分类Dev

如何在JavaScript中获取两个不同日期之间的工作日

来自分类Dev

如何在Java中获取当前日期并添加五个工作日

来自分类Dev

如何在xslt 1.0中仅获取两个日期之间的工作日

来自分类Dev

如何在Java中获取当前日期并添加五个工作日

来自分类Dev

如何在SQL查询中仅包含最后一个匹配项

来自分类Dev

如何在Oracle中查询嵌套XML?

来自分类Dev

如何在oracle中处理以下查询

来自分类Dev

如何在Mac中使用Oracle SQL Developer获取查询结果的网格视图?

来自分类Dev

如何在ORACLE APEX中使用SQL查询获取导航菜单列表?

来自分类Dev

给定一定的日期,如何在MySQL中获得与同一个工作日的上个月的第一天

来自分类Dev

如何在Oracle 11g SQL中的插入查询中插入新行

来自分类Dev

从 Hive SQL 中的日期减去工作日

Related 相关文章

  1. 1

    如何在熊猫中选择“每月的最后一个工作日”?

  2. 2

    如何在最后一个工作日自动构造带零的日期时间格式

  3. 3

    如何使用SQL查找本月的最后一个工作日

  4. 4

    n 个月前的最后一个工作日 SQL

  5. 5

    如何使用`business_time` gem获得一个月的最后一个工作日

  6. 6

    如何在Jira JQL中过滤上一个工作日

  7. 7

    如何在Powershell中获得下一个工作日

  8. 8

    SQL Server:递归函数以获取上一个工作日

  9. 9

    如何在Oracle SQL查询中编写mysql TIMESTAMPDIFF函数

  10. 10

    如何在Oracle中使用PL / SQL或SQL查询将新行插入查询结果中?

  11. 11

    如何在cron中每个月的第一个工作日运行脚本?

  12. 12

    oracle sql:计算一个月中工作日的有效方法

  13. 13

    计算一个工作日的小时数,该工作日分为2天-Access SQL

  14. 14

    Oracle (SQL):如何获取 SQL 查询语法

  15. 15

    如何在下一个工作日更新mysql日期列字段?

  16. 16

    时间序列如何向后重新采样,例如从最后一个数据日期开始的5个工作日?

  17. 17

    如何在Oracle PL / SQL查询中动态获取字段名称?

  18. 18

    如何在JavaScript中获取两个不同日期之间的工作日

  19. 19

    如何在Java中获取当前日期并添加五个工作日

  20. 20

    如何在xslt 1.0中仅获取两个日期之间的工作日

  21. 21

    如何在Java中获取当前日期并添加五个工作日

  22. 22

    如何在SQL查询中仅包含最后一个匹配项

  23. 23

    如何在Oracle中查询嵌套XML?

  24. 24

    如何在oracle中处理以下查询

  25. 25

    如何在Mac中使用Oracle SQL Developer获取查询结果的网格视图?

  26. 26

    如何在ORACLE APEX中使用SQL查询获取导航菜单列表?

  27. 27

    给定一定的日期,如何在MySQL中获得与同一个工作日的上个月的第一天

  28. 28

    如何在Oracle 11g SQL中的插入查询中插入新行

  29. 29

    从 Hive SQL 中的日期减去工作日

热门标签

归档