我有一个表(t1),其中列为FLIGHT_DATE(FLTDATE),另一列为DAYSPRIOR_TO_DEPARTURE(DAYSPRIOR),从这两列我构建了第三列TRANSACTION_DATE来自减去FLIGHT_DATE-DAYSPRIOR,最后我有一列预订SUM(BOOKED)。
以下是它的外观:
DPTDT DAYSPRIOR TRANSACTION_DATE SUM(BOOKED)
01-JUN-15 0 01-JUN-15 252
01-JUN-15 1 31-MAY-15 250
01-JUN-15 -1 02-JUN-15 252
02-JUN-15 0 02-JUN-15 179
02-JUN-15 1 01-JUN-15 180
02-JUN-15 -1 03-JUN-15 178
任何记录(航班)的最小DAYSPRIOR为-1,因此对于DPTDT 01-JUN-15,最新的TRANSACTION_DATE为02-JUN-15,说这没有DPTDT = 01-JUN-15的行,其中TRANSACTION_DATE = 03-JUN-15或大于此日期。
我想要,因为对于DPTDT = 02-JUN-15,有一个TRANSACTION_DATE = 03-JUN-15然后在TRANSACTION_DATE = 03-JUN-15时为DPTDT = 01-JUN-15显示一行,其中记录为对于此出发日期(DPTDT = 01-JUN-15),此行应与DAYSPRIOR = -1时的值相同。
这有可能吗?感谢您对此的建议!
答案 0 :(得分:0)
如果我已理解,您希望在DEPARTURE_DATE和TRANSACTION_DATE之前提取预订总和。
您的问题是将TRANSACTION_DATE“翻译”为DAYS_PRIOR,它可能会给您少于-1的数字
TRANSACTION_DATE - DEPARTURE_DATE = DAYS_PRIOR
所以
'2015-06-03' - '2015-06-01' = -2
但你永远不会在你的t1中找到任何记录:
DEPARTURE_DATE = '2015-06-01'
DAYS_PRIOR = -2
您需要的是MAP全部
(REQUESTED_TRANSACTION_DATE - REQUESTED_DEPARTURE_DATE) < 0
到
REQUESTED_DAYS_PRIOR = -1
试试这个:
declare @transaction_date date = '2015-06-3'
declare @departure_date date = '2015-06-1'
declare @days_prior int = datediff(day, @transaction_date, @departure_date)
SELECT DPTDT, DAYSPRIOR, DPTDT-DAYSPRIOR AS TRANSACTION_DATE, SUM(BOOKED) SUM_BOOKED
FROM t1
WHERE DPTDT= @departure_date
AND DAYSPRIOR = iif(@days_prior<0, -1, @days_prior)
GROUP BY DPTDT,DAYSPRIOR
这应该给你想要的结果
我希望这会有所帮助