sql-选择最大值嵌套查询的不同值
试图在找到max(dateoccurrent)的行中获取Userid值。我在所有这些子查询中迷失了方向 我正在使用SQLServer2008 注意:由于SELECT语句中另一个较大查询的一部分,因此需要返回单个值 我如何获取最大日期(有效)的示例;但是现在我需要与这个子查询max date关联的用户IDsql-选择最大值嵌套查询的不同值,sql,sql-server,sql-server-2008,Sql,Sql Server,Sql Server 2008,试图在找到max(dateoccurrent)的行中获取Userid值。我在所有这些子查询中迷失了方向 我正在使用SQLServer2008 注意:由于SELECT语句中另一个较大查询的一部分,因此需要返回单个值 我如何获取最大日期(有效)的示例;但是现在我需要与这个子查询max date关联的用户ID ( SELECT MAX(LC.[Date]) FROM table_LC LC LEFT JOIN table_LM LM ON LC.[c] = LM.[c]
(
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],
我无法看到您的整个查询,但您可能希望改用窗口函数:
max(case when lc.lc = 'ABCDEF' then lc.[DATE] end) over () as maxdate
这可能并不完全正确。很难说没有看到问题的其余部分
获取用户id将使用类似的逻辑
编辑:
您也可以通过将其放在from
子句中获得相同的效果(它不相关):
使用此子查询-
(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'))
GROUPBY子句允许您选择其他非聚合列 我假设“用户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
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