SQL 如下
CREATE TABLE #TEMP
(
A INT,
B INT
)
INSERT INTO #TEMP
(A,B)
VALUES
(1,2),
(1,1),
(2,3),
(2,1),
(2,2)
SELECT DISTINCT A,MIN(B) FROM #TEMP
GROUP BY A
請問一下,假如現在有A、B、C三個欄位
A | B | C |
---|---|---|
1 | 2 | 1 |
1 | 1 | 2 |
2 | 3 | 2 |
2 | 1 | 3 |
2 | 2 | 1 |
若要無視B的值,對A、C做同上的篩選,是不是要把A、C獨立出來做篩選之後再把B關聯進來?因為直接加DISTINCT的話,要把BGROUP進來,得出來的結果會被影響(老實說中間的東西滿多的,我有點擔心A、C搞定了,B的值反而跑掉了QQ |
所以你的意思是要取C的最小值所在那行的B嗎?萬一有兩個C最小值要取哪個B?
抱歉,在試過dog830228大的解法之後才發現這個問題的
舉個具體的例子,假如這是一個網購系統,A代表買家,B代表賣家,C代表交易時間
我主要是想取出A(買家)在一個時間區間內,最早是對哪個B(賣家)進行交易行為,然後是以C(交易成交時間)作為基準(因為有可能同一天對多個賣家進行交易),故在對C作比對時,我的B不應該被A牽動,而是跟著C走才對
不知道這樣有沒有比較容易了解了?
如果是這樣
C是來當作WHERE條件 撈取你所需的時間區間
而上面可以不用動
如這樣
CREATE TABLE #TEMP
(
A INT,
B INT,
C datetime
)
INSERT INTO #TEMP
(A,B,C)
VALUES
(1,2,Getdate()),
(1,1,dateadd(day,-1,Getdate())),
(2,3,Getdate()),
(2,1,Getdate()),
(2,2,dateadd(day,-2,Getdate()))
SELECT DISTINCT A,MIN(B) FROM #TEMP
where C BETWEEN dateadd(day,-1,Getdate()) AND GETDATE()
GROUP BY A
select A,B from Table
where B= (select min(B) from Table) ;
試試看