Sql 基于具有值的行设置值
以下是数据Sql 基于具有值的行设置值,sql,sql-server,tsql,Sql,Sql Server,Tsql,以下是数据 Mon, 02 Nov 2015 05:00 NULL 06:00 NULL 07:00 NULL 08:00 NULL 09:00 NULL 10:00 NULL 11:00 NULL 12:00 NULL 13:00 NULL 14:00 NULL 15:00 NULL 16:00 NULL 17:00 Tue, 03 Nov 2015 06:00 NULL 07:00 NULL
Mon, 02 Nov 2015 05:00
NULL 06:00
NULL 07:00
NULL 08:00
NULL 09:00
NULL 10:00
NULL 11:00
NULL 12:00
NULL 13:00
NULL 14:00
NULL 15:00
NULL 16:00
NULL 17:00
Tue, 03 Nov 2015 06:00
NULL 07:00
NULL 08:00
NULL 09:00
NULL 10:00
NULL 11:00
NULL 12:00
NULL 13:00
NULL 14:00
NULL 15:00
NULL 16:00
NULL 17:00
我想将空值替换为第1行的值date。该表包含多个日期的此类数据。当该特定日期的数据开始时,它包含日期值,之后该值为空。第二栏描述了当天的时间
请帮忙。拉吉夫以下方法可能有效。我没有测试它的表,
SQLFiddle
正在抛出错误(因为它有一些内部问题)。请尝试并报告:
UPDATE sample
SET date =
(SELECT TOP 1 b.date
FROM sample AS b)
FROM sample AS a
WHERE a.date IS NULL;
基本上,您是从表中选择日期
字段,限制为仅1行(因此仅为第一行),并使用该值更新日期
值为空的剩余行
编辑:
刚刚看到OP更新了他的问题。我的代码片段建议将失败。因为它将用第一次出现的日期更新所有行。但是OP在date列中可能有多个日期。所以,当您在插入
或更新
数据时,您是否希望执行此操作。对空值行的更新。如果我理解正确,您有日期为空
的记录,应该得到11月2日的日期。但是您是否也有null
的记录,哪些记录应该获得不同的日期?如果是的话,你怎么知道是哪一天?是的,还有其他行应该有不同的日期。这些日期是11月3日,然后是11月4日,依此类推。当值为date的行开始时,时间列开始于该天。在该日期的第一行之后,直到时间结束,日期值为空。当时间值结束时,另一天开始,依此类推……我会再次询问,您如何知道哪个null
值应该获得哪个日期?在sql中,表是未排序的,因此为了查找属于同一日期的记录,您必须找到一种方法将它们分组/排序在一起您是否有一组定义的记录时间数?即每天10条小时记录
或每天仅10条记录
或是随机记录。还是一天中某个明确的结束时间?ie每天结束于17:00
不幸的是,没有:(您的应用程序/解决方案为什么只能插入第一次出现的日期,而不能插入其余行?实际上,我正在从SSRS中提取一个报告。默认情况下,该报告将其分组。然后,我将此信息ETL到SQL表中。那么,实际上,您从SSRS中提取的所有行都是连续的吗?如果日期记录是连续的,则可以这样做。)按升序检索。但这并不漂亮,因为您基本上依赖于SRS(这违背了SQL的目的)