我只想从一年和一个月构建一个日期。我目前正在运行这样的查询:
SELECT
yyyy_mm_dd AS
t.year,
t.month,
t.id,
t.name,
...,
...
...
FROM(
SELECT
p.last_yyyy_mm_dd,
p.id,
p.name,
FROM(
SELECT
t.*,
MAX(yyyy_mm_dd) OVER (PARTITION BY last_day(yyyy_mm_dd)) as last_yyyy_mm_dd
FROM
table1 t
WHERE
yyyy_mm_dd IS NOT NULL
AND name = 'XXX'
) p
WHERE
yyyy_mm_dd = last_yyyy_mm_dd
) p
RIGHT JOIN(
SELECT
YEAR(yyyy_mm_dd) as year,
MONTH(yyyy_mm_dd) as month,
id,
name,
...,
...,
...,
FROM
table2
WHERE
yyyy_mm_dd IS NOT NULL
AND name = 'XXX'
GROUP BY
1,2,3,4
) t
ON
p.id = t.id
AND YEAR(p.last_yyyy_mm_dd) = t.year
AND MONTH(p.last_yyyy_mm_dd) = t.month在顶级select中,我还希望有一个从年份和月份构造的日期(YYYY-MM-DD)字段。日期部分应该是给定月份的最后一天。例如,对于一月份,它将是31。
我在这里查看了https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF#LanguageManualUDF-DateFunctions,可以看到last_day可能很有用,但是似乎没有像MySQL - https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html中那样的make date功能。我如何在Hive中构造这样的date?
发布于 2020-02-18 18:17:07
如果您有普通日期,则可以使用substr或date_format提取yyyy-MM
select substr('2020-01-15',1,7);
OK
2020-01
select date_format('2020-01-15','yyyy-MM');
OK
2020-01要从正常日期获取上个月的日期,可以使用last_day
select last_day(concat(substr('2020-01-15',1,7),'-01'));
OK
2020-01-31如果你有yyyy-MM并且想要最后一个月的日期,把它和'-01‘连接起来,然后应用last_day:
select last_day(concat('2020-01','-01'));
OK
2020-01-31发布于 2020-02-18 17:16:35
尝试下一段代码。它对我来说很有效:
select to_date(date_sub(add_months(concat(from_unixtime(unix_timestamp('2020-01','yyyy-MM'), 'yyyy-MM'),'-01'),1),1))输出:
+-------------+--+
| _c0 |
+-------------+--+
| 2020-01-31 |
+-------------+--+https://stackoverflow.com/questions/60276808
复制相似问题