我很难定义问题,也许你通过我的虚拟数据理解它。
我有这个数据:
PK, TaskPK
1, 1
2, 1
3, 2
4, 2
5, 5
6, 1
7, 1
8, 2
9, 2
10, 5
11, 5
Run Code Online (Sandbox Code Playgroud)
现在我必须数TaskPK一下,我提出这个查询
Select PK, TaskPK, Count(*)
From tbl
Group by TaskPK
Run Code Online (Sandbox Code Playgroud)
带来了这样的结果
TaskPK, Count(*)
1, 4
2, 4
5, 3
Run Code Online (Sandbox Code Playgroud)
但我想要稍微不同的结果
像这样
TaskPK, Count(*)
1, 2
2, 2
5, 1
1, 2
2, 2
5, 2
Run Code Online (Sandbox Code Playgroud)
上面的结果基于连续的数据出现,因为TaskPK从1开始(它分组在一起),然后它改变它2(它分组在一起),然后5(它分组在一起)taskPK。但是当TaskPK再次变为1时,那么它应该单独分组,不与之前出现的1联系起来,这个任务单独计数。
这可能吗?
下面的查询,对一个大约 600 万行的表运行需要 25 秒。当我删除最终订单时,它会在 3 秒内运行。表上没有索引(它是一个中间 SSIS ETL 目标,后来被拉入 DW。)
它不是缓存。我以任何顺序多次运行它,结果一致。
查询本身会检查序列号中的差距。SSIS 将使用它来查看是否需要重新获取任何内容。
;with edges as
(
select
ROW_NUMBER() over (partition by s1.SiteIDNumber order by s1.SequenceNumber) as rn,
s1.SiteIDNumber,
s1.SequenceNumber
from TestPlay s1
left join TestPlay s2 on s2.SiteIDNumber = s1.SiteIDNumber and s2.SequenceNumber = s1.SequenceNumber + 1
left join TestPlay s3 on s3.SiteIDNumber = s1.SiteIDNumber and s3.SequenceNumber = s1.SequenceNumber - 1
where s2.SiteIDNumber is null
or s3.SiteIDNumber is null
),
gaps as
(
select
e.rn,
e.SiteIDNumber,
e.SequenceNumber + 1 …Run Code Online (Sandbox Code Playgroud) performance sql-server t-sql sql-server-2012 gaps-and-islands
我有一张表格,如下所示:
create table z_test_duration
( Days date,
Status char(8)
);
Run Code Online (Sandbox Code Playgroud)
样本数据如下:
| 天 | 地位 |
|---|---|
| 2022 年 1 月 1 日 | 在 |
| 2022 年 1 月 2 日 | 在 |
| 2022 年 1 月 3 日 | 在 |
| 2022 年 1 月 4 日 | 离开 |
| 2022 年 1 月 5 日 | 在 |
| 2022 年 1 月 6 日 | 离开 |
| 2022 年 1 月 7 日 | 在 |
| 2022 年 1 月 8 日 | 在 |
| 2022 年 1 月 9 日 | 离开 |
想要的结果是这样的
| 时间到了 | OFF_DATE | COUNT_OF_ACTIVE_DAYS … |
|---|
我有一张表,如下所示:
CAR NAME INSERT DATE
MERCEDES 2018-01-01
SEAT 2018-01-01
MERCEDES 2018-01-02
BMW 2018-01-02
MERCEDES 2018-01-03
MERCEDES 2018-01-04
MERCEDES 2018-01-05
BMW 2018-01-05
BMW 2018-01-06
SEAT 2018-01-07
BMW 2018-01-08
AUDI 2018-01-08
BMW 2018-01-09
BMW 2018-01-10
NULL 2018-01-12
SEAT 2018-01-12
SEAT 2018-01-14
SEAT 2018-01-16
BMW 2018-01-17
NULL 2018-01-19
MERCEDES 2018-01-21
MERCEDES 2018-01-22
MERCEDES 2018-01-23
Run Code Online (Sandbox Code Playgroud)
我想知道有多少次连续CAR NAME插入到表中,排序时INSERT DATE,以及 first 和 last INSERT DATE。出于此查询的目的,CAR NAME应忽略一个连续的结果。
例如:
name count first last
mercedes 3 2018-01-03 2018-01-05
bmw 2 2018-01-05 2018-01-06 …Run Code Online (Sandbox Code Playgroud)