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

时间:2018-07-02 13:40:45

标签: 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       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中的费率,否则如何使用相应日期的费率?

3 个答案:

答案 0 :(得分:1)

这是一种方法:

SELECT TOP 10 r.* 
FROM (SELECT TOP (1) WITH TIES r.*
      FROM Rates r
      WHERE Date <= '2017-06-09'
      ORDER BY Date DESC
     ) r;

TOP (1) WITH TIES返回具有相同日期的所有记录(假设没有时间部分,这与您的示例数据和问题一致)。 WHERE说日期不迟于2017-06-09。 ORDER BY表示它是指定日期或指定日期之前的最新日期。

外部TOP (10)与您的查询一样,从其中任意选择10个。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

var base64EncodedPdf = Convert.ToBase64String(Model.FileContent);
<iframe src="data:application/pdf;base64,@base64EncodedPdf " style="width:1200px; height:1000px;"></iframe>