2010-02-01 29 views
1
 

SELECT DISTINCT u.UserID, UserLastName, UserFirstName, UserName, Notified, 
MAX (CycleNumber) as CycleNumber, (CycleCurrentStep) as CycleCurrentStep, 
MAX (CycleDateReported) as CycleDateReported, 
max (cycleid) 
FROM [User] u 
left join Cycle c on (u.UserID = c.UserID) 
join UserDivSection us on (u.UserID = us.UserID 
and us.DivSectionID=26) 
group by u.UserID, UserLastName, UserFirstName, UserName, Notified, c.CycleCurrentStep 
 
 

UserID UserLastName UserFirstName UserName Notified CycleNumber CycleCurrentStep CycleDateReported 
290 Williams Craig [email protected] 1 7 0  208 
290 Williams Craig [email protected] 1 9 3  210 
290 Williams Craig [email protected] 1 7 5 1/29/2010 3:06:23 PM 204 
290 Williams Craig [email protected] 1 8 6 2/1/2010 9:26:40 AM 209 
 

我们正在努力恢复与最大cyclenumber该用户ID匹配的唯一不重复的用户ID行。现在,查询对于不同的循环号返回相同的用户标识多次。我们并不确定如何继续进行正确的查询。任何帮助,将不胜感激。帮助我们解决这个问题的SQL语句

+0

'(CycleCurrentStep)'之前是否有MAX丢失? – Greg

+0

基本上,您需要做的是运行一个查询,获取每个用户的最大值(CycleNumber),然后加入到其中以获取有关该特定User/CycleNumber组合的其余数据 – Leslie

回答

0

你可以用where子句中的子查询来做到这一点。就像:

SELECT u.UserID, UserLastName, UserFirstName, UserName, Notified, 
CycleNumber, CycleCurrentStep, CycleDateReported, cycleid 
FROM [User] u 
left join Cycle c on (u.UserID = c.UserID) 
join UserDivSection us on (u.UserID = us.UserID and us.DivSectionID=26) 
where cyclenumber = (select max(cyclenumber) from cycle where cycle.userid = u.userid) 

虽然我不确定UserDivSection部分。

2

从您的group by子句中删除CycleCurrentStep。

1

这可能是因为你在c.CycleCurrentStep上分组。这是一个来自Cycle的未聚合列 - 如果Cycle中的所有行出现CycleCurrentStep的多个不同值(对应于User的一行),那么您将在结果中得到与该用户一样多的行对于CycleCurrentStep

值您可以从GROUP BY列表中删除CycleCurrentStep列,但随后你将不得不也从SELECT列表中删除它 - 那是因为你不能在同一时间聚集所有相应Cycle行作为一个组,然后选择一个没有丝毫价值的数据并报告。因此,如果您从GROUP BY中删除CycleCurrentStep,则必须将其从SELECT列表中删除,或者对其应用有意义的合计功能,就像您对应用MAX()函数的其他列中的Cycle一样。

1
SELECT 
    u.UserID, 
    UserLastName, 
    UserFirstName, 
    UserName, 
    Notified, 
    c.CycleNumber, 
    c.CycleCurrentStep, 
    c.CycleDateReported, 
    c.cycleid 
FROM 
    [User] u 
    INNER JOIN 

    (SELECT 
     u.UserID 
     Max(CycleNumber) CycleNumber, 
    FROM 
     [User] u 
     left join Cycle c on (u.UserID = c.UserID) 
    GROUP BY 
     u.UserID) MaxCycle 
    ON u.UserID = MaxCycle.UserId 
    INNER JOIN Cycle c 
    ON MaxCycle.Cycleumber = c.CycleNumber