2

所以我有两张桌子,看起来像这样;

table_a                            table_b
reg     |rm     |date              reg     |rm     |date
========+=======+==========        ========+=======+==========
1       |1      |2013-01-01        2       |2      |2013-01-01
1       |1      |2013-01-02        2       |2      |2013-01-05
3       |2      |2013-01-08        3       |2      |2013-01-08

-我知道它看起来像两个具有相同数据的不同表,但实际上它具有不同的列,我只是没有包含与此问题无关的任何其他列

这就是我在搜索时想要实现的目标rm=2

result
reg     |date
========+==========
3       |2013-01-08
2       |2013-01-01

当我尝试使用时join,没有出现,当我尝试使用它时说不能为空,因为我用来获取最早的日期。(当我删除功能时它没有出错,但它会显示每个日期 - 我只需要最早的日期和)reg 2table_bunion allregmin(date)minorder by date desc

这是我实现这一目标的查询;

SELECT b.reg, min(b.date) as ddate
FROM table_a a 
join table_b b on (o.reg=a.reg) 
where b.rm = '2'
order by ddate desc

还有这个

select reg,min(date) as ddate from table_a where rm = '2'                  
union all
select reg,min(date) as ddate from table_b where rm = '2'
order by ddate desc
4

2 回答 2

2

如果你有几个重复的键并且只需要 1 它是GROUP BY,如果你想先最低,它是ORDER BY ... ASC

SELECT * FROM table_a a WHERE a.rm = 2 GROUP BY a.reg ORDER BY a.date ASC
UNION
SELECT * FROM table_b b WHERE b.rm = 2 GROUP BY b.reg ORDER BY b.date ASC

我没有 100% 理解为什么你有 2 个不同的表来存放相同的东西,也许你需要先 UNION 然后 GROUP BY:

SELECT * FROM (
    SELECT * FROM table_a
    UNION ALL
    SELECT * FROM table_b
) x
WHERE x.rm = 2
GROUP BY x.reg
ORDER BY x.date ASC
于 2013-10-17T03:42:49.053 回答
1

试试这个:

select reg, min(date)
from (
    (select reg, rm, date from table_a)
    UNION
    (select reg, rm, date from table_b)
) union_tbl
where rm = 2
group by reg
于 2013-10-17T03:35:50.043 回答