2012-11-08 34 views
1

望着下面的SQL小提琴:http://sqlfiddle.com/#!2/962496/1條件SQL選擇:選擇時有一個值選擇所有,但最小的日期

一個人怎麼能選擇從用戶的所有訂單[email protected]與userpk = 2和reg = 1,但只有 來自[email protected]且userpk = 1且reg = 0的兩個最近訂單。因此,查詢將顯示userpk = 2的3個訂單,但只有2個訂單(不是最早的訂單2012-01-01 userpk = 1

所以病情會REG,如果REG = 0,則忽略一階

+0

您的問題是無法回答的。您的SQL Fiddle示例沒有名爲「reg」的列,也沒有與「order」相關的表或列。請修復SQL小提琴。您也可以將問題中的表格定義。 –

+0

小提琴固定,表用戶有列reg和訂單的關係是通過uPK(用戶userpk) –

+0

最近的訂單總是最後兩個訂單?你的問題不幫 – frayab

回答

2

我覺得這會給你的結果THA T優想:

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 with Demo

一個版本不是針對單一用戶(如果你有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 with Demo

+0

我可以在那裏引用別名「where」,因爲這是一個新的select語句嗎?我仍然不明白爲什麼我不能在經常使用別名的地方使用別名,但在這裏使用別名。 –

+0

@BenSchnitzel這是一個表別名,所以是的,你可以使用它。除非它是派生表或子查詢的一部分,否則不能在「WHERE」子句中使用列別名。 – Taryn

+0

非常感謝你在過去的幾天裏非常幫助bluefeet:D我明天會完成這個問題,並告訴結果 –