繁体   English   中英

sql-选择最大值嵌套查询的其他值

[英]sql - select different value of a max value nested query

尝试在找到max(DateOccurred)的行中获取Userid值。 我在所有这些子查询中迷路了。

我正在使用SQL Server 2008。

注意:由于SELECT语句中另一个较大查询的一部分,需要返回单个值。

我如何获取最大日期的示例(有效); 但现在我需要与此子查询的最大日期关联的用户ID。

    (

    SELECT MAX(LC.[Date]) 

    FROM table_LC LC LEFT JOIN table_LM LM ON LC.[c] = LM.[c] AND LC.[L] = LM.[L]

    WHERE LM.[c] = LC.[c] AND LM.[L] = LC.[L] AND LC.[LC] = 'ABCDEF'

    ) as [ABCDEF_Date],

我看不到您的整个查询,但您可能想改用window函数:

max(case when lc.lc = 'ABCDEF' then lc.[DATE] end) over () as maxdate

这可能并不完全正确。 不看查询的其余部分就很难说。

获取用户标识将使用类似的逻辑。

编辑:

您也可以通过将它放在from子句中来获得相同的效果(它不相关):

from . . . cross join
     (select top 1 lc.[Date], lc.id
      FROM table_LC LC LEFT JOIN
           table_LM LM
           ON LC.[c] = LM.[c] AND LC.[L] = LM.[L]
      WHERE LM.[c] = LC.[c] AND LM.[L] = LC.[L] AND LC.[LC] = 'ABCDEF'
      order by lc.[date] desc
     ) as ABCDEF_Date

使用此子查询-


(SELECT Userid,
        Date
FROM   (SELECT Userid, Date FROM table_LC) b
WHERE  date = (SELECT MAX(LC.[Date]) 
FROM table_LC LC LEFT JOIN table_LM LM ON LC.[c] = LM.[c] AND LC.[L] = LM.[L]
WHERE LM.[c] = LC.[c] AND LM.[L] = LC.[L] AND LC.[LC] = 'ABCDEF')) 

GROUP BY子句使您可以选择其他未聚合的列。

我假设“用户ID”字段位于LC表中,但它也很容易位于LM表中。

SELECT
    LC.[UserID]
    , MAX(LC.[Date]) 

FROM
    table_LC LC
    LEFT JOIN table_LM LM ON 
        LC.[c] = LM.[c] AND LC.[L] = LM.[L]

WHERE LM.[c] = LC.[c] AND LM.[L] = LC.[L] AND LC.[LC] = 'ABCDEF'

GROUP BY LC.[UserID]

@Gordon提到了将SELECT TOP 1与ORDER BY结合使用的另一种好方法。

SELECT TOP 1
    LC.[UserID]
    , LC.[Date]

FROM
    table_LC LC
    LEFT JOIN table_LM LM ON 
        LC.[c] = LM.[c] AND LC.[L] = LM.[L]

WHERE LC.[LC] = 'ABCDEF'

ORDER BY LC.[Date] DESC

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM