源数据
日期 (thedate) | 编号 (id) | 名称 (name) |
---|---|---|
2019-08-27 | 10001 | storm |
2019-08-27 | 10002 | flink |
2019-08-27 | 10003 | spark |
2019-08-27 | 10004 | flume |
2019-08-27 | 10005 | zookeeper |
2019-08-27 | 10006 | kafka |
2019-08-27 | 10007 | hadoop |
2019-08-28 | 10004 | 日志采集 |
2019-08-29 | 10005 | 调度 |
2019-08-30 | 10007 | 集群 |
方法一:自连接取最新
SELECT
t1.thedate,t1.id,t1.name
FROM
test t1
LEFT JOIN test t2 ON t1.id = t2.id
AND t1.thedate < t2.thedate
WHERE t2.id IS NULL
ORDER BY id`
结果:
thedate | id | name |
---|---|---|
2019-08-27 | 10001 | storm |
2019-08-27 | 10002 | flink |
2019-08-27 | 10003 | spark |
2019-08-28 | 10004 | 日志采集 |
2019-08-29 | 10005 | 调度 |
2019-08-27 | 10006 | kafka |
2019-08-30 | 10007 | 集群 |
方法二:拼接取最新
SELECT
max( thedate ) thedate,
id,
SUBSTR( max( name ), 12, length( max( name ) ) ) name
FROM
( SELECT
thedate, id, concat( thedate, ' ', name ) name
FROM test
) t
GROUP BY id
ORDER BY id
结果:
thedate | id | name |
---|---|---|
2019-08-27 | 10001 | storm |
2019-08-27 | 10002 | flink |
2019-08-27 | 10003 | spark |
2019-08-28 | 10004 | 日志采集 |
2019-08-29 | 10005 | 调度 |
2019-08-27 | 10006 | kafka |
2019-08-30 | 10007 | 集群 |
在数据量大的情况下,方法二性能较好