我有一张表,按日期记录。我需要比较第1年到第2年(去年)的数据,但在某些情况下,第1年的一些记录在第2年不存在,而第2年的某些记录在第1年不存在。
我只关心那些匹配的东西。我的结构是:
F_DATE F_TEXT1 F_TEXT2 F_NUMBER1 F_NUMBER2
2014-01-01 bob sue 19 12
2013-04-19 bob sue 12 11
2013-06-01 bob jane 5 6
2014-11-28 jane bob 4 4
2014-03-12 mike bob 8 1
所以在上面的例子中只关心包含bob + sue的记录。
我可以通过concat(F_TEXT1,F_TEXT2) as f_compare
识别记录,然后在此字段bobsue
上count
having count(*) > 1
,但这样做效果不佳,因为F_DATE
是配对所独有的,F_NUMBER1
和F_NUMBER2
是进一步处理的基础。
我正在加入另一个表,其中包含多年的F_LABEL
和一个开始日期(F_SDATE
)和结束日期(F_EDATE
)列,以便为其提供一个不错的标签。年。
我很难将记录放入查询中,因此我可以进一步处理它们。
我试图选择我需要的所有内容 - 此查询提供了第1年和第2年的额外记录。我还从F_DATE
中选择T_SOMETABLE
,这基本上是用于配置,因此此查询可以通过更改F_SOMEVALUE
来更新以比较第3年到第4年等。
SELECT F_LABEL, F_TEXT1, F_TEXT2, F_NUMBER1, F_NUMBER2, fix
FROM (
SELECT b.F_LABEL, a.F_TEXT1, a.F_TEXT2, a.F_HGOALS, a.F_AGOALS,
concat(F_HOME,'-',F_AWAY) as fix FROM all_records a, some_labels b
WHERE a.F_DATE > b.F_SDATE
AND a.F_DATE < b.F_EDATE
AND a.F_DATE > (SELECT F_DATE FROM T_SOMETABLE WHERE F_SOMEVALUE='1')
UNION ALL
SELECT F_LABEL, F_TEXT1, F_TEXT2, F_NUMBER1, F_NUMBER2,
concat(F_TEXT1,'-',F_AWAY) as fix
FROM all_records a, some_labels b
WHERE a.F_DATE > b.F_SDATE
AND a.F_DATE < b.F_EDATE
AND a.F_DATE > (SELECT F_DATE FROM T_SOMETABLE WHERE F_SOMEVALUE='2')
AND a.F_DATE < (SELECT F_DATE FROM T_SOMETABLE WHERE F_SOMEVALUE='1')
) z
ORDER BY F_TEXT1, F_TEXT2, F_LABEL
我无法从第2年中选择第1年中的concat(上图),然后从两者中选择F_LABEL, F_TEXT1, F_TEXT2, F_NUMBER1 and F_NUMBER2
一年到一桌。
你能指点我正确的方向吗?
如果此查询可以进入VIEW
(此处嵌套语句没有帮助),则可以使用奖励点,因此每次添加新记录时都不需要重新创建查询/表。 / em>的
查询需要很好地执行,因为输出会显示在网页上。
答案 0 :(得分:1)
很难给出准确的答案,但是,为了将一年与前一年相比较,您需要自己加入表格(t1
和t2
以下两次出现{ {1}}),形成如下查询:
yourtable