所以问题是我有一个数据集,其中每行包含以下数据:
ID, data, year, meta
不同年份的数据有所不同,但每年都有一些数据。我想查询仅在几年内存在的数据,但我还想查询查询中每年存在的数据。
例如:
我想查询它们,它们具有匹配的ID,并且仅存在于该年。到目前为止,我所拥有的工作解决方案就是这个。
SELECT ID, data, year, meta
FROM table1 WHERE year IN
(
SELECT year
FROM table1
WHERE meta LIKE 'DATA1'
)
AND meta LIKE 'DATA2'
UNION ALL
(
SELECT ID, data, year, meta
FROM table1
WHERE meta LIKE 'DATA1'
)
ORDER BY year, ID
这里的问题是查询
SELECT ID, data, year, meta
FROM table1
WHERE meta LIKE 'DATA1'
重复一次(它在第一个查询中用作条件,然后它也会自己查询。我想知道是否有查询我想要的方法,而不重复上述查询。 即我想进行查询,返回结果,然后执行另一个查询,该查询只包含第一个查询中重叠的数据,而总共只执行两个查询。 示例输入:
122, DATA1_datapoint, 2010, DATA2
122, DATA1_datapoint, 2009, DATA2
123, DATA1_datapoint, 2011, DATA2
123, DATA2_datapoint, 2011, DATA1
124, DATA1_datapoint, 2012, DATA2
124, DATA2_datapoint, 2012, DATA1
预期输出(id是3位数字,例如123):
123, DATA1_datapoint, 2011, DATA1
123, DATA2_datapoint, 2011, DATA2
124, DATA1_datapoint, 2012, DATA1
124, DATA2_datapoint, 2012, DATA2
答案 0 :(得分:2)
如何创建 CTE ?
WITH CTE AS (
SELECT ID, data, year, meta
FROM table1
WHERE meta LIKE 'DATA1'
)
SELECT ID, data, year, meta
FROM table1
WHERE year IN (SELECT year FROM CTE)
AND meta LIKE 'DATA2'
UNION ALL
SELECT ID, data, year, meta
FROM CTE
ORDER BY year, ID