1

查看以下 SQL 小提琴:http ://sqlfiddle.com/#!2/962496/1

怎么能从用户 b@b.cn 中选择 userpk = 2 和 reg = 1 的所有订单,但只选择来自 a@a.cn 的两个最新订单,其中 userpk = 1 和 reg = 0。所以查询将显示 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 回答