【发布时间】:2019-10-21 10:51:00
【问题描述】:
我有一个有 3 列的表格
Create table test
(
Created Datetime
, Flag Bit
, Amount Money
)
看起来像这样
Created Flag Amount
2019-12-01 00:00:00.000 1 50,40
2019-11-21 00:00:00.000 1 50,40
2019-11-06 00:00:00.000 0 50,40
2019-10-04 00:00:00.000 1 50,40
2019-09-08 00:00:00.000 1 50,40
2019-09-01 00:00:00.000 0 50,40
2019-08-04 00:00:00.000 1 50,40
2019-07-24 00:00:00.000 1 50,40
2019-07-23 00:00:00.000 1 50,40
2019-06-01 00:00:00.000 0 50,40
2019-05-05 00:00:00.000 0 50,40
2019-04-25 00:00:00.000 1 50,40
2019-03-11 00:00:00.000 0 50,40
2019-02-03 00:00:00.000 0 50,40
2019-02-02 00:00:00.000 0 50,40
2019-02-01 00:00:00.000 0 50,40
2019-01-31 00:00:00.000 1 50,40
2019-01-26 00:00:00.000 0 50,40
2019-01-26 00:00:00.000 0 50,40
2019-01-01 00:00:00.000 1 50,40
如您所见,它按Created 降序排列。
想象一下所有这些行都是事务。当标志为一时,我们有一个检查点。因此,例如从第 20 行到第 17 行是一个时期(总是从旧到新计数)。从第 17 行到第 12 行是另一个句号,依此类推。
请注意,在第 9,8 和 7 行中,我们有 3 个连续的标志,其值为 1。发生这种情况时,连续的 1 没有 0,我想将所有连续的 1 视为一个组。我希望它们显示为一行,总金额并保留其中的 MIN(Created)。
例如,对于第 9-7 行,我想将其分组为一行,其中 amount 的值为 151.2,flag 的值为 1,Created 的值为 2019-07-23 00:00:00.000 (三行的min(date)。
此表的示例输出如下。
Created Flag Amount
2019-11-21 00:00:00.000 1 100,80
2019-11-06 00:00:00.000 0 50,40
2019-09-08 00:00:00.000 1 100,80
2019-09-01 00:00:00.000 0 50,40
2019-07-23 00:00:00.000 1 151,20
2019-06-01 00:00:00.000 0 50,40
2019-05-05 00:00:00.000 0 50,40
2019-04-25 00:00:00.000 1 50,40
2019-03-11 00:00:00.000 0 50,40
2019-02-03 00:00:00.000 0 50,40
2019-02-02 00:00:00.000 0 50,40
2019-02-01 00:00:00.000 0 50,40
2019-01-31 00:00:00.000 1 50,40
2019-01-26 00:00:00.000 0 50,40
2019-01-26 00:00:00.000 0 50,40
2019-01-01 00:00:00.000 1 50,40
【问题讨论】:
-
您的示例输出看起来很像输入。
-
MySQL SQL Server 和 MySQL 不使用 T-SQL。我已经删除了冲突的标签;请重新标记仅您真正使用的 RDBMS。至于你的帖子,你的问题是什么,你似乎没有问过。您尝试过什么方法来解决问题,为什么没有成功?
-
问题是我想达到我所展示的解决方案,但我不知道执行此操作的代码。我需要帮助!
-
“我需要帮助!”我们仍然需要首先知道您真正使用的是什么 RDBMS。
-
"请注意,在第 9,8 和 7 行中,我们有 3 个连续的标志,其值为 1。当这种情况发生时,连续的 1 没有 0,我想处理所有连续的1s 作为一个组。我希望它们显示为一行,总金额并保持它们的 MIN(Created)。" 如果该组中的最小日期具有相同日期两次或多次的关系?那么你有一个问题,因为除了 Created 之外你没有订单..
标签: sql sql-server sql-server-2017 gaps-and-islands