Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择“用不同日期的值替换空值”_Sql_Sql Server_Tsql - Fatal编程技术网

Sql 选择“用不同日期的值替换空值”

Sql 选择“用不同日期的值替换空值”,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在使用SQL Server,我有一个简单的查询 SELECT TOP 10 * FROM Rates WHERE Date = '2017-06-09 00:00:00' 对于该日期,没有费率,如果没有费率,查询应给出2017-06-08 00:00:00的结果 样本数据: dtmDate int CurrencyCode strCurrency dblInRate dblCCRate 2012-05-16 00:00:00 12 DZD

我正在使用SQL Server,我有一个简单的查询

SELECT TOP 10 * 
FROM Rates 
WHERE Date = '2017-06-09 00:00:00'
对于该日期,没有费率,如果没有费率,查询应给出2017-06-08 00:00:00的结果 样本数据:

dtmDate int     CurrencyCode    strCurrency dblInRate   dblCCRate 
2012-05-16 00:00:00 12           DZD       0.010545     0.010545 
2012-05-11 00:00:00 12           DZD       0.010511     0.010511
2006-06-26 00:00:00 12           DZD       0.011334     0.011334 
2016-03-30 00:00:00 12           DZD       0.008309     0.008309 
2017-04-26 00:00:00 12           DZD       0.008530     0.008530 
2017-04-28 00:00:00 12           DZD       0.008561     0.008561 
2017-05-03 00:00:00 12           DZD       0.008530     0.008530 
2017-10-13 00:00:00 12           DZD       0.007587     0.007587 
2017-10-19 00:00:00 12           DZD       0.007581     0.007581 
-对于2018-06-09,表中没有任何记录,我需要将其替换为以前的日期

那么,当日期为2017-06-09时,我如何让它选择所有日期的所有费率,然后使用2017-06-08的费率,否则使用相应日期的费率?

这里有一种方法:

SELECT TOP 10 r.* 
FROM (SELECT TOP (1) WITH TIES r.*
      FROM Rates r
      WHERE Date <= '2017-06-09'
      ORDER BY Date DESC
     ) r;
假设没有时间成分,则前1个有联系的返回所有日期相同的记录,这与示例数据和问题一致。WHERE表示日期不晚于2017-06-09。ORDER BY表示这是指定日期当天或之前的最新日期


外部前10名任意选择其中的10个,查询也是如此。

您可以将特定列强制转换为“日期”,并将其与筛选器进行比较。就这样,

SELECT TOP 10 * 
FROM Rates 
WHERE Date <= '2017-06-09 00:00:00'
ORDER BY Date DESC
SELECT TOP 10 * 
FROM Rates 
WHERE cast(Date as date)= '2017-06-09'

如果没有2017-06-08的数据会发生什么?如果没有6月8日的数据,它应该会带来7日的数据?你能在哪一天添加一些样本数据和每天的预期结果?另外,如果您每天单独查询,那么如果9号没有数据,您应该已经有了8号的数据。只需在显示屏上再次张贴即可。无需反复查询数据。David在问题中包含数据和预期输出,而不是在评论中。您可以在此处格式化数据。嗨,戈登,谢谢,但这不是我需要的。我需要此表中的所有数据,我知道这一正确日期没有数据,因此我需要从2018年6月9日的费率中选择*然后使用8.6日的费率。2017@DavidBelovezcik . . . 这就是这个查询所做的。这是一个聪明的解决方案,据我所知,Internal selection将返回带领带的单日top 1的所有价格,订单保证您将在给定日期之前或之前获得最新的可用价格。