【发布时间】:2018-08-03 23:25:43
【问题描述】:
我有以下疑问:
SELECT * from `provider_info` where provnum not in
(select pi_provnum from prov_index where length(pi_provnum)=6)
and length(provnum)=6 group by provnum
prov_index 每个 provnum/pi_provnum 只有一行。但是 provider_info 每个省可以有多行。
我基本上是从一个表中提取第二个表中没有提供者 (provnum/pi_provnum) 条目的行。内部查询为我提供了 provnum 列的列表,这些列存在于 provider_info 表中,但不存在于 prov_index 表中。 (length() 条件是我在查询中需要的额外内容)
由于 provider_info 中可能有多个具有相同 provnum 的条目,我使用“group by provnum”子句只给我一个实例。但我最终需要与具有最新 'sourcedate' 值的行对应的所有列。
有没有办法使用 DISTINCT 代替 GROUP 子句?
最终,我需要从 provider_info 返回一个特定的行(所有列),即“soucedate”列中具有最新日期的行
我试过了,但它不起作用:
SELECT * from `provider_info` where provnum not in
(select pi_provnum from prov_index where length(pi_provnum)=6)
and length(provnum)=6 order by provnum,sourcedate desc group by provnum
having sourcedate=max(sourcedate)
基本上,我想要的是 provider_info 中的一行列表,其中包含最新的 sourcedate 列,其中 provnum 在第二个表 prov_index 中不存在。关键是我想要最后一行中的所有列,而不仅仅是 max(sourcedate)
这可以在单个复杂查询中完成吗?
【问题讨论】:
-
您也许可以使用 order by 和 limit 作为过滤器... Select * from provider_info order by sourcedate limit 1
标签: mysql sql mariadb greatest-n-per-group