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
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
嘗試......
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標準的數據庫產品的工作。
select distinct t1.*
from table t1
join table t2
on (t1.X = t2.X and t1.date <> t2.date);
@Yuck我沒有機會測試它,但你確定嗎?在我看來,這個查詢應該給出所需的結果。 – 2012-03-07 19:53:53
@Yuck我測試了它,它工作正常。 – 2012-03-07 20:13:38
'table'是一個SQL關鍵字,它會阻止它運行。你真的跑什麼來測試?哪個RDBMS? – Yuck 2012-03-07 20:20:18
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
的數據庫和版本? – 2012-03-07 20:07:42
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
因爲我的sql只能從sqlserver 2008+工作。 – 2012-03-07 20:25:06