left join tab_cms_channel a on b.channelid=a.id
group by b.channelid,a.DisplayName,b.AuditorDisplayName ,b.CreatorDisplayName,b.CreateTime
order by UpdateCount desc
5 个解决方案
#1
你是想在 select 列表中写多个字段,但是又想在 group by 中写一个字段 ?
#2
就想问问怎么才能写成这种效果
#3
只对其中一个值进行分组,那么其他字段的值你如何取呢?
#4
对那些没有分组的字段,你要 max 一下;
PS:好像 mysql 中可以写成楼主想要的结果,但是这些列返回的结果,都是不稳定的;
PS:好像 mysql 中可以写成楼主想要的结果,但是这些列返回的结果,都是不稳定的;
#5
用 MAX 取得的字段值不是 b 中同一条记录的值,可以用下面的方式
WITH T1 AS (
select top 20
channelid,
COunt(id) as UpdateCount
from tab_news
group by channelid
order by UpdateCount desc
)
,T2 AS (
SELECT T1.*,
a.DisplayName
FROM T1
left join tab_cms_channel a
on T1.channelid=a.id
)
SELECT T2.UpdateCount,
V.AuditorDisplayName,
V.CreatorDisplayName,
V.CreateTime,
T2.DisplayName,
T2.channelid
FROM T2
CROSS APPLY (
SELECT TOP 1
b.AuditorDisplayName,
b.CreatorDisplayName,
b.CreateTime
FROM tab_news b
WHERE b.channelid=T2.channelid
ORDER BY b.id DESC -- 这是取id最大的一条
) V
order by UpdateCount desc
#1
你是想在 select 列表中写多个字段,但是又想在 group by 中写一个字段 ?
#2
就想问问怎么才能写成这种效果
#3
只对其中一个值进行分组,那么其他字段的值你如何取呢?
#4
对那些没有分组的字段,你要 max 一下;
PS:好像 mysql 中可以写成楼主想要的结果,但是这些列返回的结果,都是不稳定的;
PS:好像 mysql 中可以写成楼主想要的结果,但是这些列返回的结果,都是不稳定的;
#5
用 MAX 取得的字段值不是 b 中同一条记录的值,可以用下面的方式
WITH T1 AS (
select top 20
channelid,
COunt(id) as UpdateCount
from tab_news
group by channelid
order by UpdateCount desc
)
,T2 AS (
SELECT T1.*,
a.DisplayName
FROM T1
left join tab_cms_channel a
on T1.channelid=a.id
)
SELECT T2.UpdateCount,
V.AuditorDisplayName,
V.CreatorDisplayName,
V.CreateTime,
T2.DisplayName,
T2.channelid
FROM T2
CROSS APPLY (
SELECT TOP 1
b.AuditorDisplayName,
b.CreatorDisplayName,
b.CreateTime
FROM tab_news b
WHERE b.channelid=T2.channelid
ORDER BY b.id DESC -- 这是取id最大的一条
) V
order by UpdateCount desc