Sql 使用不同的where子句条件组合查询
如何组合这些查询,以便使用第一个查询中第二个查询的Sql 使用不同的where子句条件组合查询,sql,Sql,如何组合这些查询,以便使用第一个查询中第二个查询的dayCall 第一次查询 select clientid, DATEDIFF( DAY, CONVERT(datetime, convert(varchar(10), min(calendar))), MIN(dayCall) ) from Stats group by clientid SELECT clientid, MIN(calenda
dayCall
第一次查询
select clientid,
DATEDIFF(
DAY,
CONVERT(datetime, convert(varchar(10), min(calendar))),
MIN(dayCall)
)
from
Stats
group by clientid
SELECT
clientid,
MIN(calendar)
as dayCall
FROM (
SELECT
clientid,
CONVERT(datetime, convert(varchar(10), calendar)) calendar,
lead(calls) over (partition by clientid order by calendar) as total_1,
lead(calls, 2) over (partition by clientid order by calendar) as total_2
FROM STATS
) a
where calls = 0 and total_1 = 0 and total_2 = 0
GROUP BY clientid
第二次查询
select clientid,
DATEDIFF(
DAY,
CONVERT(datetime, convert(varchar(10), min(calendar))),
MIN(dayCall)
)
from
Stats
group by clientid
SELECT
clientid,
MIN(calendar)
as dayCall
FROM (
SELECT
clientid,
CONVERT(datetime, convert(varchar(10), calendar)) calendar,
lead(calls) over (partition by clientid order by calendar) as total_1,
lead(calls, 2) over (partition by clientid order by calendar) as total_2
FROM STATS
) a
where calls = 0 and total_1 = 0 and total_2 = 0
GROUP BY clientid
你可以把这些表连在一起。我看到clientID在这两个表中都很常见,但应该进行完全外部联接,以确保即使两个表之间没有公共clientID,也能得到所有结果:
SELECT * FROM
(
select clientid,
DATEDIFF(
DAY,
CONVERT(datetime, convert(varchar(10), min(calendar))),
MIN(dayCall)
)
from
Stats
group by clientid
) tableA
FULL OUTER JOIN
(
SELECT
clientid,
MIN(calendar)
as dayCall
FROM (
SELECT
clientid,
CONVERT(datetime, convert(varchar(10), calendar)) calendar,
lead(calls) over (partition by clientid order by calendar) as total_1,
lead(calls, 2) over (partition by clientid order by calendar) as total_2
FROM STATS
) a
where calls = 0 and total_1 = 0 and total_2 = 0
GROUP BY clientid
) tableB
ON tableA.clientid = tableB.clientid
你可以把这些表连在一起。我看到clientID在这两个表中都很常见,但应该进行完全外部联接,以确保即使两个表之间没有公共clientID,也能得到所有结果:
SELECT * FROM
(
select clientid,
DATEDIFF(
DAY,
CONVERT(datetime, convert(varchar(10), min(calendar))),
MIN(dayCall)
)
from
Stats
group by clientid
) tableA
FULL OUTER JOIN
(
SELECT
clientid,
MIN(calendar)
as dayCall
FROM (
SELECT
clientid,
CONVERT(datetime, convert(varchar(10), calendar)) calendar,
lead(calls) over (partition by clientid order by calendar) as total_1,
lead(calls, 2) over (partition by clientid order by calendar) as total_2
FROM STATS
) a
where calls = 0 and total_1 = 0 and total_2 = 0
GROUP BY clientid
) tableB
ON tableA.clientid = tableB.clientid
使用条件聚合:
select clientid,
min(case when calls = 0 and total_1 = 0 and total_2 = 0 then calendar end) as dayCall,
datediff(day
convert(datetime, convert(varchar(10), min(calendar))),
min(dayCall)
)
from (select s.*,
convert(datetime, convert(varchar(10), calendar)) calendar,
lead(calls) over (partition by clientid order by calendar) as total_1,
lead(calls, 2) over (partition by clientid order by calendar) as total_2
from STATS s
) s
group by clientid
使用条件聚合:
select clientid,
min(case when calls = 0 and total_1 = 0 and total_2 = 0 then calendar end) as dayCall,
datediff(day
convert(datetime, convert(varchar(10), min(calendar))),
min(dayCall)
)
from (select s.*,
convert(datetime, convert(varchar(10), calendar)) calendar,
lead(calls) over (partition by clientid order by calendar) as total_1,
lead(calls, 2) over (partition by clientid order by calendar) as total_2
from STATS s
) s
group by clientid
对你的大多数读者来说,这可能是苹果对橙子。最好在这里包含一些示例数据以及预期的输出。第二个查询无效。应引发错误。请使用CTE(公共表表达式)计算第二个查询,然后在第一个查询中使用它。对于大多数读者来说,这可能是小菜一碟。最好在这里包含一些示例数据以及预期的输出。第二个查询无效。应引发错误。使用CTE(公共表表达式)计算第二个查询,然后在第一个查询中使用它。当尝试执行
MIN(dayCall)
时,我收到无效列名dayCall
错误。原始查询可能有问题。我所做的只是按照请求将这两个查询连接在一起。我没有测试您的原始查询。我在尝试执行MIN(dayCall)
时遇到无效列名dayCall
错误。您的原始查询可能有问题。我所做的只是按照请求将这两个查询连接在一起。我没有测试您的原始查询。我在尝试执行MIN(dayCall)
@Aaron时遇到无效列名dayCall
错误DayCall
在您的第一个查询中。这不是我发明的。我编辑了答案,从STATS
中选取了所有栏目。戈登,我想我之前不清楚。此行抛出错误-datediff(day convert(日期时间,convert(varchar(10),min(日历))),min(dayCall))
。它无法从脚本的第二行识别dayCall
。当它尝试执行MIN(dayCall)
@Aaron时,我得到一个无效的列名dayCall
错误DayCall
在您的第一个查询中。这不是我发明的。我编辑了答案,从STATS
中选取了所有栏目。戈登,我想我之前不清楚。此行抛出错误-datediff(day convert(日期时间,convert(varchar(10),min(日历))),min(dayCall))
。它无法从脚本的第二行识别dayCall
。