我有以下
(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
的完整行,我想显示具有最大DueDate
的行。
我在t1,t2
附近得到的语法不正确答案 0 :(得分: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
答案 1 :(得分:0)
你错过了分组依据。
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