2010-12-07 138 views
0

我有一個複雜的查詢,我只是不能創建。我正在考慮用JOIN做它,但不知道從哪裏開始。我會盡可能清楚地解釋我的問題。複雜的查詢與SQLite

我正在創建處理補償的軟件。每個補償可以有幾個鏈接(如在一個鏈中)。每個鏈接基本上都是一個客戶。所以,我就告訴你的表結構:

客戶鏈接現在,加入

CustomerID | Name 

補償

CompensationID | CustomerID | Date 

LinkID | CompensationID | CustomerID | Sequential 

與每一個環節的連續場增加。讓我用一些數據填充表表明:

CustomerID | Name 
-----------+----- 
0   | Foo 
1   | Bar 
2   | Baz 

CompensationID | CustomerID | Date 
---------------+------------+------ 
0    | 0   | 2-2-2010 
1    | 1   | 2-3-2010 


    LinkID | CompensationID | CustomerID | Sequential 
    -------+----------------+------------+----------- 
    0    0    0   0 
    1    0    2   1 
    2    0    1   2 

所以不管什麼鏈路ID/CompensationID /客戶ID的順序總是從0到N的鏈接表(取決於補償多少鏈接了) 。

現在,這裏的問題是:我想列出所有補償的,其鏈接的滿足以下要求:

搜索鏈接中 客戶id = A 順序= 0(第一環節)和順序;最後一個(在這種情況下, 2) 名單補償

這是我走到這一步:

SELECT * FROM Compensation JOIN Link ON Compensation.ID = Link.CompensationID 
WHERE Link.CustomerID=A AND Link.Sequential = 0 AND Link.Sequential=LAST 

這或多或少是僞SQL,因爲我知道Link.Sequential不能是0,另一個價值在同一時間,但我不知道如何做到這一點。

任何幫助,將不勝感激。

謝謝。

P.S. 對不起,文字很長。

+0

用`嘗試Link.Sequential = 0或Link.Sequential = LAST`(並且只評估時0是最後一個 - 如果鏈接表中有多於一行的話,則永遠不會)。 – 2010-12-07 23:09:33

回答

1

如果在語句子查詢工作,我記得:

​​
0

嘗試

SELECT c.* 
FROM Compensation c 
JOIN (select CompensationID, MAX(Sequential) AS LastSeq FROM Link GROUP BY CompensationID) AS LastOnes ON c.ID = LastOnes.CompensationID 
JOIN (select CompensationID FROM Link WHERE CustomerID=A AND Sequential=0) AS FirststOnes ON c.ID = FirststOnes.CompensationID 
JOIN Link AS l on l.CompensationID=c.CompensationID AND l.CustomerID=A AND l.Sequential=LastOnes.LastSeq