2012-08-10 45 views
-1

我有以下SQL服務器獲得最高紀錄

(SELECT 
    ts.PID, 
    tt.ID, 
    tt.ItemOrder, 
    tt.DisplayVal as Task, 
    tt.Responsible as ResParty, 
    tt.DaysDue, 
    DATEADD(day, tt.DaysDue, PgStartDate) as DueDate, 
    ts.spate As ActualDate , 
    ps.PgStartDate as ProgramDate 
FROM tblTimeline tt 
CROSS JOIN tblSers ts 
JOIN PG ps ON ps.PID = ts.PId 
WHERE tt.ID = 2 
AND ps.cancelled = 0) 

t1 
INNER JOIN(

SELECT 
    ts.PID, 
    max(DATEADD(day, tt.DaysDue, PgStartDate)) as DueDate 
FROM tblTimeline tt 
CROSS JOIN tblSers ts 
JOIN PG ps on ps.PID = ts.PId 
WHERE tt.ID = 2 
AND ps.cancelled = 0) 

t2 
    ON t1.PID = t2.PID 
    AND t1.DueDate = t2.DueDate 

t1,我有什麼是PID, DueDate對於給定的行重複。

我喜歡爲每個PID獲取完整行,我喜歡顯示具有Max DueDate的行。

我在t1,t2附近得到不正確的語法

回答

1

看來你缺少一個GROUP BY以及你最初SELECT開始發言:

SELECT * --missing this 
FROM  --missing this 
(
    select ts.PID, 
    tt.ID, 
    tt.ItemOrder, 
    tt.DisplayVal as Task, 
    tt.Responsible as ResParty, 
    tt.DaysDue, 
    DATEADD(day, tt.DaysDue, PgStartDate) as DueDate, 
    ts.spate As ActualDate , 
    ps.PgStartDate as ProgramDate 
    from tblTimeline tt 
    cross join tblSers ts 
    join PG ps on ps.PID = ts.PId 
    where tt.ID = 2 and ps.cancelled = 0 
) t1 
inner join 
(
    select ts.PID, 
    max(DATEADD(day, tt.DaysDue, PgStartDate)) as DueDate 
    from tblTimeline tt cross join tblSers ts 
    join PG ps 
    on ps.PID = ts.PId 
    where tt.ID = 2 and ps.cancelled = 0 
    GROUP BY ts.PID --missing this 
) t2 
    on t1.PID = t2.PID 
    and t1.DueDate = t2.DueDate 
0

您錯過了Group By。

select ts.PID, max(DATEADD(day, tt.DaysDue, PgStartDate)) as DueDate 
    from tblTimeline tt cross join tblSers ts 
    join PG ps on ps.PID = ts.PId 
    where tt.ID = 2 and ps.cancelled = 0 
    group by ts.PID 
+0

謝謝,我進入了這個,但仍不能識別T1,T2。我在這裏做錯了嗎? – 2012-08-10 01:34:22