Sql 选择“用不同日期的值替换空值”
我正在使用SQL Server,我有一个简单的查询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
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的所有价格,订单保证您将在给定日期之前或之前获得最新的可用价格。