【发布时间】:2020-06-07 08:31:53
【问题描述】:
我有一些数据库,我需要从一个表中清理一些数据,我想相当自动地这样做。
首先是架构:这个数据库中有几个表,但我只需要专门清理一个表。
表名是CollectedProducts:
[Id] [int] IDENTITY(1,1) NOT NULL,
[Date] [date] NOT NULL,
[Time] [time](7) NOT NULL,
[BouquetId] [int] NOT NULL,
[EmployeeId] [int] NOT NULL,
[ProductionEnd] [bit] NOT NULL
我对最后一列感兴趣,ProductionEnd,它指出特定员工是否在特定日期完成了生产。
此列的逻辑约束是,在给定日期的生产结束时,必须至少有一行将此列设置为 1。所以它基本上是员工在某一天的最后一行。
一天中还可以有其他行设置为 1,表示员工有更长的休息时间。
其后不得有另一行,其值设置为 1。
现在考虑到这些限制,我想选择具有无效 ProductionEnd 值的所有行,这样这不是每个(天,员工)对的最后一行,我还想保留所有带有 @ 的行987654325@ 设置为 1,这不是最后一行,但也没有后跟 / 前面有另一行,根据我上面描述的约束,此列设置为 1。
这样的查询怎么写?
【问题讨论】:
-
您没有给出完整的架构,因为没有表名。另外,您尝试自己编写此查询是什么?
-
我正在尝试选择最后一行,但我不确定如何保留那些不在最后一行的孤 1 的“岛屿”。
-
@kamilwydrzycki 。 . .样本数据和期望的结果会有所帮助。
标签: sql sql-server select window-functions gaps-and-islands