我正在尝试使用 SQL Hive 从数据库列中获取每个月的最大日期。 我有一个表格如下:
yyyymmdd |
---|
2020-05-01 |
2020-05-10 |
2020-05-20 |
2020-05-27 |
2020-06-03 |
2020-06-12 |
2020-06-21 |
2020-06-23 |
我尝试了这段代码:
SELECT MAX(yyyymmdd) OVER (PARTITION BY last_day(yyyymmdd)) as last_yyyymmdd FROM mytable t
但是我得到了这个结果:
yyyymmdd | 最后_yyyymmdd |
---|---|
2020-05-01 | 2020-06-23 |
2020-05-10 | 2020-06-23 |
2020-05-20 | 2020-06-23 |
2020-05-27 | 2020-06-23 |
2020-06-03 | 2020-06-23 |
2020-06-12 | 2020-06-23 |
2020-06-21 | 2020-06-23 |
2020-06-23 | 2020-06-23 |
我期待的结果:
yyyymmdd | 最后_yyyymmdd |
---|---|
2020-05-01 | 2020-05-27 |
2020-05-10 | 2020-05-27 |
2020-05-20 | 2020-05-27 |
2020-05-27 | 2020-05-27 |
2020-06-03 | 2020-06-23 |
2020-06-12 | 2020-06-23 |
2020-06-21 | 2020-06-23 |
2020-06-23 | 2020-06-23 |
一种可能性是按年和月对数据进行分组并将其加入表中
SELECT [yyyymmdd], MAX_MONTH
FROM Table1 t1
JOIN
(SELECT format([yyyymmdd],'MM.yyyy') AS year_month, MAX([yyyymmdd]) MAX_MONTH
FROM Table1
GROUP BY format([yyyymmdd],'MM.yyyy') ) t2 ON t2.year_month = format(t1.[yyyymmdd],'MM.yyyy')
yyyymmdd | MAX_MONTH |
---|---|
2020-05-01 | 2020-05-27 |
2020-05-10 | 2020-05-27 |
2020-05-20 | 2020-05-27 |
2020-05-27 | 2020-05-27 |
2020-06-03 | 2020-06-23 |
2020-06-12 | 2020-06-23 |
2020-06-21 | 2020-06-23 |
2020-06-23 | 2020-06-23 |