【发布时间】:2015-02-24 11:18:08
【问题描述】:
我有一种情况,我需要根据 where 子句输入来迭代一个条件,想知道如何做到这一点。
背景是,在一个存储单元中,它由几个罐组成,每个罐都有自己的罐倾角测量状态,最后测量的日期不同,我怎样才能得到特定日期的最新倾角值?
例子:
Tank A having last measured date (EndDate) as 01 Feb 2015.
Tank B having last measured date (EndDate) as 31 Jan 2015.
Tank B having last measured date (EndDate) as 17 Feb 2015.
Tank C having last measured date (EndDate) as 18 Feb 2015.
表结构:
Tanks| DipDaytime| Volume| EndDate
A, 28 Jan 2015 8pm, 1000, 01 Feb 2015
B, 30 Jan 2015 5pm, 2000, 31 Jan 2015
B, 01 Feb 2015 5pm, 2500, 17 Feb 2015
C, 01 Feb 2015 3pm, 3000, 18 Feb 2015
预期的输出是:
For 31 Jan 2015:
A, 28 Jan 2015 8pm, 1000, 01 Feb 2015
B, 30 Jan 2015 5pm, 2000, 31 Jan 2015
For 18 Feb 2015:
A, 28 Jan 2015 8pm, 1000, 01 Feb 2015
B, 01 Feb 2015 5pm, 2500, 17 Feb 2015
C, 01 Feb 2015 3pm, 3000, 18 Feb 2015
我能得出这样的结果:
SELECT ts.Tanks, ts.DipDaytime, ts.EndDate , ts.Volume
FROM table ts
WHERE ts.EndDate =
(SELECT MAX(ts2.EndDate ) FROM table ts2
WHERE ts2.Tanks = ts.Tanks
AND ts2.EndDate <= '17.02.2014')
问题是我需要更改 17.01.2014 每次我需要一个特定日期的不同结果时,我也无法将 17.01.2014 显示为查询结果,因为它不是表的一部分。
如何以动态方式获得它,我只需要提供一个日期范围,例如从 01.02.2014 到 28.02.2014,以获得完整的结果?还有一个显示报告日期的临时列?
最终结果将是:
For 31 Jan 2015:
Tank | DipDaytime| Volume| EndDate, ReportDate
A, 28 Jan 2015 8pm, 1000, 01 Feb 2015, 31 Jan 2015
B, 30 Jan 2015 5pm, 2000, 31 Jan 2015, 31 Jan 2015
For 18 Feb 2015:
Tank | DipDaytime| Volume| EndDate, ReportDate
A, 28 Jan 2015 8pm, 1000, 01 Feb 2015, 18 Feb 2015
B, 01 Feb 2015 5pm, 2500, 17 Feb 2015, 18 Feb 2015
C, 01 Feb 2015 3pm, 3000, 18 Feb 2015, 18 Feb 2015
如果有人可以提供帮助,我们将不胜感激。谢谢。
【问题讨论】:
-
为什么坦克 A 出现在这两种情况下?
-
@SagarJoon: 因为坦克 A 在 31.01 和 18.02 之间没有变化?