我有一个表,上面有这样的行:(日期,分数,名称)
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