1

次の SQL フィドルを見る: http://sqlfiddle.com/#!2/962496/1

userpk = 2 および reg = 1 のユーザー b@b.cn からのすべての注文を選択する方法と、userpk = 1 および reg = 0 の a@a.cn からの最新の 2 つの注文のみを選択するにはどうすればよいでしょうか。したがって、クエリは 3 つの注文を表示します。 userpk = 2 の場合、注文は 2 つだけです (userpk = 1 からの最も早い注文 2012-01-01 ではありません)

したがって、条件はregになります。reg = 0の場合、最初の順序は無視されます

4

1 に答える 1

2

これにより、必要な結果が得られると思います。

select *
from users u
left join another a
  on u.userpk = a.uPK
where
(
  u.userpk = 2
  and u.reg = 1
)
or
(
  u.userpk = 1
  and u.reg = 0
  and a.odate not in (select min(odate)
                      from another a1
                      where u.userpk = a1.uPK)
) 

デモで SQL Fiddle を参照してください

単一ユーザーに固有ではないバージョン (2 人以上のユーザーがいる場合):

select *
from users u
left join another a
  on u.userpk = a.uPK
where
(
   u.reg = 1
)
or
(
  u.reg = 0
  and a.odate not in (select min(odate)
                      from another a1
                      where u.userpk = a1.uPK)
) 

デモで SQL Fiddle を参照してください

于 2012-11-08T16:47:02.373 に答える