2

だから私は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

-同じデータを持つ2つの異なるテーブルのように見えますが、実際には異なる列があります。この質問に関係のない他の列は含めませんでした

これは、検索するときに達成しようとしていることですrm=2;

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

を使用しようとするとjoin、表示reg 2されtable_bませんでした。(関数を削除してもエラーにはなりませんでしたが、すべての日付が表示されます - 最も古い日付と のみが必要です)union 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

同じものに対して2つの異なるテーブルがある理由を100%理解していませんでした。最初に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 に答える