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的目的)