2012-03-07 143 views
13
X Y DATE 
1 20 20120101 
1 21 20120101 
2 30 20120201 
3 40 20120201 
3 41 20120301 

我要選擇有另一行,其中X是一樣的任何行,但日期是不同的,即答案是選擇是在一列同一行,但不同的另一

3 40 20120201 
3 41 20120301 
+0

的數據庫和版本? – 2012-03-07 20:07:42

+0

Microsoft SQL Server 2008(SP1) - 10.0.2531.0(X64)Mar 29 2009 10:11:52 Copyright(c)1988-2008 Windows NT 6.0(Build 6002:Service Pack 2)上的Microsoft Corporation Developer Edition(64位) )....爲什麼? – gmaximus 2012-03-07 20:16:03

+0

因爲我的sql只能從sqlserver 2008+工作。 – 2012-03-07 20:25:06

回答

20

嘗試......

SELECT * 
FROM YourTable 
WHERE X IN (
    SELECT T1.X 
    FROM YourTable T1 INNER JOIN 
     YourTable T2 ON T1.X = T2.X 
    WHERE T1.DATE <> T2.DATE 
); 

這應該在最符合ANSI標準的數據庫產品的工作。

+0

這是一個工作答案,由我的供應商的SQL實現不允許嵌套選擇 - 但我明白幫助 – gmaximus 2012-03-07 20:19:13

+0

我其實覺得我還是有點困惑,你能給出答案只是上面的x和y列這個問題'具有相同的Y和不同的X'? – gmaximus 2012-03-07 20:54:43

+2

@gmaximus:你用sql-server-2008標記了你的問題,並且你說你使用的是SQL Server 2008.那麼當你說你的供應商的sql實現不允許嵌套選擇時,你是什麼意思? SQL Server 2008絕對允許嵌套選擇。 – 2012-03-08 05:53:15

2
select distinct t1.* 
    from table t1 
    join table t2 
    on (t1.X = t2.X and t1.date <> t2.date); 
+0

@Yuck我沒有機會測試它,但你確定嗎?在我看來,這個查詢應該給出所需的結果。 – 2012-03-07 19:53:53

+0

@Yuck我測試了它,它工作正常。 – 2012-03-07 20:13:38

+0

'table'是一個SQL關鍵字,它會阻止它運行。你真的跑什麼來測試?哪個RDBMS? – Yuck 2012-03-07 20:20:18

0
declare @t table(X int, Y int, DATE CHAR(8)) 
insert @t values 
(1, 20, '20120101'), 
(1, 21, '20120101'), 
(2, 30, '20120201'), 
(3, 40, '20120201'), 
(3, 41, '20120301') 

select x,y, date, maxy, miny from 
(
    select *, max(date) over (partition by x) maxdate, 
    min(date) over (partition by x) mindate 
    from @t 
) a 
where mindate <> maxdate