我有以下查询。
基本查询
WITH CTE (clientid, dayZero)
AS
-- Define the CTE query.
(
SELECT
clientid,
DATEDIFF(
DAY,
MIN(calendar),
MIN(CASE
WHEN total = 0
THEN calendar
END)
) as dayZero
FROM (
SELECT
clientid,
CONVERT(datetime, convert(varchar(10), calendar)) calendar,
TOTAL
FROM STATS s1
) a
GROUP BY clientid
),
cteb as
-- Define the outer query referencing the CTE name.
(SELECT cte.*, c.company, v.Name, m.id as memberid
FROM CTE
JOIN client c
on c.id = cte.CLIENTID
join Domain v
on v.Id = c.domainID
join subscriber m
on m.ClientId = c.id
join activity a
on m.id = a.memberid
where c.id != 023
),
ctec as
(
select count(distinct memberid) as Number from cteb
group by clientid
)
select clientid, dayzero, company, name, Number from cteb , ctec
此查询的输出为-
clientid dayzero company name Number
21 35 School Boards Education 214
21 35 School Boards Education 214
我希望每个客户端仅返回1行。有关如何修改此查询的任何想法
子查询
select count(distinct memberid) as Number from cteb
group by clientid
当我只运行查询直到上述子查询并选择时-
select * from ctec
where clientid = 21
我知道
clientid Number
21 214
22 423
这就是我想要的。但是,当我运行以下select来获取所需的所有其他列时,我开始获取重复项。输出有意义,因为我没有按clientid
分组。但是,如果我groupby
如何获得所需的其他列?
select clientid, dayzero, company, name, Number from cteb , ctec
更新
当我运行以下内容时,选择
select clientid, dayzero, company, name, Number from cteb , ctec
group by clientid, dayzero, company, name, Number
我还是
clientid dayzero company name Number
21 35 School Boards Education 214
21 35 School Boards Education 215
我不明白为什么我在“数字”列中得到了不同的数字(本例中为214和215)。但是,当我按如下所示与group by一起运行时,我得到了正确的数字。
select count(distinct memberid) as Number from cteb
group by clientid
select * from ctec
where clientid = 21
我知道
clientid Number
21 2190
214
和215
都不正确。正确的数字是2190
,当我如上所述分组时得到的数字。
答案 0 :(得分:0)
如果您要显示基于特定列的唯一行,则可以像以下查询一样使用ROW_NUMBER()
。
select * from
(
select clientid, dayzero, company, name, Number,
ROW_NUMBER() OVER(PARTITION BY clientid ORDER BY Number DESC) RN
from cteb , ctec
) t
where RN=1