我有一个表,上面有这样的行:(日期,分数,名称)
Date字段有两个可能的日期,并且Name值可能仅出现在一个日期下(如果该名称是最近添加或删除的)。

我正在寻找一个包含以下行的表:(增量,名称),其中增量是较早和较晚日期之间每个名称的得分变化。另外,我只有一个消极的变化,因此,如果Delta> = 0,则它根本不会出现在输出表中。

我面临的主要挑战是计算Delta字段。
如标题中所述,它应该是一个SQL查询。

在此先感谢您的帮助!

最佳答案

我假设每个名称都可以有自己的开始/结束日期。如果整个表格只有两个可能的日期,则可以大大简化。

我在SQL Fiddle here中进行了尝试

SELECT (score_end - score_start) delta, name_start
FROM
( SELECT date date_start, score score_start, name name_start
  FROM t t
  WHERE NOT EXISTS
  ( SELECT 1
    FROM t x
    WHERE x.date < t.date
     AND x.name = t.name
   )
 ) AS start_date_t
JOIN
( SELECT date date_end, score score_end, name name_end
  FROM t t
  WHERE NOT EXISTS
  ( SELECT 1
    FROM t x
    WHERE x.date > t.date
      AND x.name = t.name
   )
 ) end_date_t ON start_date_t.name_start = end_date_t.name_end
 WHERE score_end-score_start  < 0

10-07 19:34
查看更多