我有如下數據(小提琴 - http://sqlfiddle.com/#!6/9eecb7db59d16c80417c72d1/3757):選擇基於沒有組一列獨特的結果通過
SELECT * FROM
(
SELECT 1 AS Id1, 1000 AS Id2, NULL AS Item1, 1 AS Item2 --this should be removed from my results
UNION SELECT 1 AS Id1, 1000 AS Id2, NULL AS Item1, 2 AS Item2
UNION SELECT 3 AS Id1, 1000 AS Id2, 0 AS Item1, 0 AS Item2
UNION SELECT 4 AS Id1, 1000 AS Id2, 1 AS Item1, 1 AS Item2
--BELOW DATA DIFFERS FROM THE ABOVE ONLY ON Id2
UNION SELECT 1 AS Id1, 2000 AS Id2, NULL AS Item1, 1 AS Item2 --this should be removed from my results
UNION SELECT 1 AS Id1, 2000 AS Id2, NULL AS Item1, 2 AS Item2
UNION SELECT 3 AS Id1, 2000 AS Id2, 0 AS Item1, 0 AS Item2
UNION SELECT 4 AS Id1, 2000 AS Id2, 1 AS Item1, 1 AS Item2
) AS TestData
我需要過濾TestData
,只得到不同Id1, Id2
。結果必須符合以下規則:
- 下面所有的規則都必須遵循
Id2
分組(我的意思是下面僅適用於由Id2
列定義行組)。這意味着TestData
數據集包含兩組 -1000,2000
- 所有行
Item1
比賽Item2
是好的,應該是始終返回 - 如果
2.
不被滿足,則取該行只有Item1
是NULL
和Item2
沒有匹配的任何地方TestData
(規則1.
仍然適用 - 所以,我們需要通過當前組數據集中查找)
總而言之,我需要從TestData
得到每個組的第一行旁邊的所有Id。另外,請注意,我知道我可以簡單地致電SELECT DISTINCT
並擁有適當的Id,但在此情況並非如此。由於Item2
已在組中的匹配項(規則3
),所以我的問題比上面描述的更大,基本上我想知道的是如何從上述數據中的每個組中刪除第一行。
這看起來很像一個家庭作業。你試過什麼了? –
是的,這是很多功課好。今天在這個工作上花了半天時間......我沒有什麼可以分享的,因爲我還沒有嘗試過。我基本上重寫了蹩腳的SQL,上面是我在離開工作前被卡住的結果。所以也許這裏有人會對如何避免使用Group By有任何提示,如果不是的話,那麼明天我可能會再花半天時間。 – ojek
您能否提供您期望從樣本數據中輸出的數據?我不確定我是否理解你的所有標準。 –