gpt4 book ai didi

sql-server-2005 - 从左外连接中选择最上面的一个

转载 作者:行者123 更新时间:2023-12-04 14:07:37 27 4
gpt4 key购买 nike

伙计们,我有一个查询,其中基本上选择了我们用户使用的最新浏览器。

这是我们的(简化的)表结构

HITS_TABLE
----------
USERID
BROWSER
HITSDATE

USER_TABLE
----------
USERID
USERNAME

这是我查询用户使用的最新浏览器的方式
SELECT U.*, H.BROWSER

FROM USER_TABLE U

CROSS APPLY
(SELECT TOP 1 BROWSER
FROM HITS_TABLE
WHERE HITS_TABLE.USERID = U.USERID
ORDER BY HITS_TABLE.HITSDATE DESC
)as H

HITS_TABLE 是几天前刚刚添加的。

因此,该查询只是在我们添加 HITS_TABLE 后访问我们网站的结果用户,并消除了其他用户。

这是示例案例
USER_TABLE
-------------------
USERID USERNAME
-------------------
1 'Spolski'
2 'Atwoord
3 'Dixon'


HITS_TABLE
------------------------------
USERID HITSDATE BROWSER
------------------------------
2 15/8/2009 'Firefox 3.5'
1 16/8/2009 'IE 6'
2 16/8/2009 'Chrome'

这是示例结果
------------------------------
USERID USERNAME BROWSER
------------------------------
1 'Spolsky' 'IE 6'
2 'Atwoord' 'Chrome'

但是,我想用“未知”浏览器添加其他用户。
这是我想要的结果
------------------------------
USERID USERNAME BROWSER
------------------------------
1 'Spolsky' 'IE 6'
2 'Atwoord' 'Chrome'
3 'Dixon' 'Unknown'

我相信它可以通过 LEFT OUTER JOIN 来实现。
但我总是有这个:(我不想要这个结果)
------------------------------
USERID USERNAME BROWSER
------------------------------
1 'Spolsky' 'IE 6'
2 'Atwoord' 'Chrome'
2 'Atwoord' 'Firefox 3.5'
3 'Dixon' 'Unknown'

我希望我的问题很清楚。

最佳答案

对 hits_table 使用 userid 上的 group by 可以让您获得每个 userid 的 max() hitsdate。我在下面的代码中称之为 LATEST HITS。

在 USER TABLE 上选择左连接到 LATEST HITS 允许您为每个用户提取记录。

重新加入 HITS 表,然后您就可以提取与该日期关联的浏览器记录,或者为没有记录的用户提取空值。

select
user_table.userid,
user_table.username,
isnull(hitstable.browser, 'unknown') as browser
from
user_table
left join
(
select
userid,
max(hitsdate) hitsdate
from
hits_table
group by
userid
) latest_hits
on
user_table.userid = latest_hits.userid
left join
hits_table
on hits.table.userid = latest_hits.userid
and hits_table.hitsdate = latest_hits.hitsdate

关于sql-server-2005 - 从左外连接中选择最上面的一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1283787/

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