我有下表,其中我有日期(不是主键)和评级(' A'是最高等级):
date rating
03-10-2010 C
03-09-2010 C
03-08-2010 B
03-07-2010 B
03-06-2010 B
03-05-2010 B
03-04-2010 A
我需要进行查询,我会比较评分,以便为每个'日期'返回结果。
例如。考虑到03-10-2010的日期,我想知道最后一次降级评级何时发生。如果降级是1天前返回' 1'因此,如果是2天前返回' 2'如果超过3天则返回0。 我会为每个日期做同样的查询,得到一个包含结果的数组。
我试图这样做,我没有更多的想法如何做到这一点。有人可以帮我吗? 谢谢。答案 0 :(得分:1)
您希望每个记录的日期与最后一次降级之前的记录日期之间的差异(天数)。
当您有特定记录时,最后一次降级之前的记录是
的记录在SQL中,可以使用相关子查询来完成:
SELECT date,
rating,
(SELECT date
FROM MyTable AS downgrade
WHERE downgrade.date < MyTable.date
AND downgrade.rating < MyTable.rating
ORDER BY date DESC
LIMIT 1) AS downgrade_date
FROM MyTable
date rating downgrade_date
---------- ---------- ----------
2010-03-04 A
2010-03-05 B 2010-03-04
2010-03-06 B 2010-03-04
2010-03-07 B 2010-03-04
2010-03-08 B 2010-03-04
2010-03-09 C 2010-03-08
2010-03-10 C 2010-03-08
要计算差异,请将日期转换为数字值。 然后,您可以使用此值进行进一步计算:
SELECT date,
rating,
CASE
WHEN days <= 3 THEN days
ELSE 0
END AS whatever
FROM (SELECT date,
rating,
julianday(date) -
julianday((SELECT date
FROM MyTable AS downgrade
WHERE downgrade.date < MyTable.date
AND downgrade.rating < MyTable.rating
ORDER BY date DESC
LIMIT 1)) AS days
FROM MyTable)