sqlite查询比较不同行中的数据

时间:2014-05-03 22:01:50

标签: sqlite python-2.7 comparison

我有下表,其中我有日期(不是主键)和评级(' 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。 我会为每个日期做同样的查询,得到一个包含结果的数组。

我试图这样做,我没有更多的想法如何做到这一点。有人可以帮我吗? 谢谢。

1 个答案:

答案 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)
相关问题