[英]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.