我应该有一些样本数据在里面 table_name_a
具体如下:
code val_a date
-------------------------
1 00001 500 20191101
2 00001 1000 20191130
3 00002 200 20191101
4 00002 400 20191130
5 00003 200 20191101
6 00003 600 20191130
有一些 val_a
的 code
在20191101和20191130之间,我想得到每个月的最后一天值 code
,我的sql查询如下(需要匹配 Hive
以及 Impla
):
SELECT code, max(date) AS date, val_a
FROM table_a
WHERE date BETWEEN '20090601'
AND '20090630'
GROUP BY code, val_a
但是上面的查询是错误的(代码的值不是这个月的最后一天),我的预期输出如下:
code val_a date
--------------------------
1 00001 1000 20191130
2 00002 400 20191130
3 00003 600 20191130
非常感谢你的建议。
5条答案
按热度按时间iugsix8n1#
如果您只需要每月最后一天的数据,那么您可以使用
LAST_DAY
以及TRUNC
函数在中的日期WHERE
条款如下:干杯!!
j0pj023g2#
您可以尝试以下代码。在子查询中,您将获得最大日期和代码。这个
WHERE IN
子句用作数据的筛选器。uwopmtnx3#
更一般地说,您可以使用正确的子查询:
cbwuti444#
使用行号:
结果:
v09wglhw5#
我们可以试着用
ROW_NUMBER
解决方案:请注意,将日期存储为文本不是最佳做法。也就是说,假设您是以固定宽度的iso格式存储日期,在这种情况下,我们仍然可以使用这些日期。还有,你现在
WHERE
子句没有意义,所以我把它注解掉了。