Sql 选择子查询中日期最早的值
我想从日期最早的子查询返回一个值 表Sql 选择子查询中日期最早的值,sql,oracle,greatest-n-per-group,Sql,Oracle,Greatest N Per Group,我想从日期最早的子查询返回一个值 表 id sub bid 1 1 1 1 2 2 1 3 1 1 4 1 2 1 2 2 2 1 表B id value date 1 red 01/01/2016 1 blue 05/01/2016 2 red 07/01/2016 2 green 03/01/2016 2 yellow 08/01/2016 预期产量 id sub value 1 1
id sub bid
1 1 1
1 2 2
1 3 1
1 4 1
2 1 2
2 2 1
表B
id value date
1 red 01/01/2016
1 blue 05/01/2016
2 red 07/01/2016
2 green 03/01/2016
2 yellow 08/01/2016
预期产量
id sub value
1 1 red
1 2 green
1 3 red
1 4 red
2 1 green
2 2 red
现行代码
SELECT a.id,
a.sub,
(SELECT b.value FROM tableb b WHERE b.date = MIN(b.date)) AS value
FROM tablea a
INNER JOIN tableb b ON a.bid = b.id
尝试使用不存在的:
SELECT t.id,t.sub,s.value
FROM TableA t INNER JOIN TableB s ON(t.bid = s.id)
WHERE NOT EXISTS(SELECT 1 FROM tableB f
WHERE f.id = s.id and f.date < s.date)
这基本上就是加入,然后过滤所有日期大于当前值的人,使您保留所有最新日期。尝试使用“不存在”:
SELECT t.id,t.sub,s.value
FROM TableA t INNER JOIN TableB s ON(t.bid = s.id)
WHERE NOT EXISTS(SELECT 1 FROM tableB f
WHERE f.id = s.id and f.date < s.date)
这基本上是进行连接,然后过滤所有日期大于当前值的人,使您保留所有最新日期。假设您希望每个id的最小日期:
假设您需要每个id的最小值:
没有得到任何错误,但它已经运行了15分钟了,这是一个有效的方法来处理大量的数据吗?你必须有大量的数据。索引会有帮助:比如tablebid,date。虽然没有出现任何错误,但它已经运行了15分钟,这是一种有效的方法吗?你必须有很多数据。索引会有帮助:例如tablebid、date。