gpt4 book ai didi

sql - 如何更干净地将 sql 聚合函数与 distinct 结合起来?

转载 作者:行者123 更新时间:2023-12-05 09:00:14 26 4
gpt4 key购买 nike

我最近反复遇到以下情况,我需要将 MAX() 或 SUM() 应用于表中的一列,但我需要为其他列设置不同的值集。

例如,请考虑下表和表示登录 StackOverflow 的详细信息的相关列。

SoUserLogins (OpenIdToken, Name, IpAdress, LoginTimeStamp, QuestionsAsked)

我可能想要一个包含用户及其上次登录的结果集。

SELECT DISTINCT
OpenIdToken,
MAX(LoginTimeStamp)
INTO #tmpLastLogin
FROM SoUserLogins
GROUP BY OpenIdToken

但我需要与其他列不同的值。我将把它包装在一个公用表表达式 (CTE) 中,因为我稍后会用到它并且不想清理另一个临时表。

;WITH tmpLastLogin_CTE AS (
SELECT DISTINCT
SOL.OpenIdToken, SOL.Name, SOL.IpAdress, SOL.QuestionsAsked
TTL.LastLogin
FROM SoUserLogins SOL
JOIN #tmpLastLogin TLL ON SOL.OpenIdToken = TLL.OpenIdToken
)
--Extra SQL using tmpLastLogin_CTE goes here

您可以将上面代码中的 MAX(LoginTimeStamp) 更改为 SUM(QuestionsAsked),并进行一些额外的调整以查看类似示例。

我的问题是,是否有更简洁或更优雅的方式来处理这些情况?

我正在使用 SQL Server。

最佳答案

你是这个意思吗?

SELECT DISTINCT
SOL.OpenIdToken, SOL.Name, SOL.IpAdress, SOL.QuestionsAsked,
MAX(LoginTimeStamp) OVER (PARTITION BY OpenIdToken) AS LastLogin
FROM SoUserLogins SOL

因此,每个 OpenIdToken 将有多个行,并且相同的 LastLogin 值将对组内的所有行重复?

关于sql - 如何更干净地将 sql 聚合函数与 distinct 结合起来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3826459/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com