iT邦幫忙

0

SQL條件比對

sql
564219 2017-07-20 13:51:2910594 瀏覽
  • 分享至 

  • xImage

假設我現在有一個TABLE,裡面有A和B兩個欄位
如我欲將A欄位中有相同值的幾項分別挑出來,取該項目在B欄位中的最小值可以怎麼做?
例:

A B
1 2
1 1
2 3
2 1
2 2

下SQL條件列出以下結果

A B
1 1
2 1

煩請各位多多指教

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
石頭
iT邦高手 1 級 ‧ 2017-07-20 14:36:50
最佳解答

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
看更多先前的回應...收起先前的回應...
564219 iT邦新手 5 級 ‧ 2017-07-20 14:54:27 檢舉

請問一下,假如現在有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
小魚 iT邦大師 1 級 ‧ 2017-07-20 19:40:07 檢舉

所以你的意思是要取C的最小值所在那行的B嗎?萬一有兩個C最小值要取哪個B?

564219 iT邦新手 5 級 ‧ 2017-07-21 08:37:36 檢舉

抱歉,在試過dog830228大的解法之後才發現這個問題的
舉個具體的例子,假如這是一個網購系統,A代表買家,B代表賣家,C代表交易時間
我主要是想取出A(買家)在一個時間區間內,最早是對哪個B(賣家)進行交易行為,然後是以C(交易成交時間)作為基準(因為有可能同一天對多個賣家進行交易),故在對C作比對時,我的B不應該被A牽動,而是跟著C走才對
不知道這樣有沒有比較容易了解了?

石頭 iT邦高手 1 級 ‧ 2017-07-21 09:34:04 檢舉

如果是這樣
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
0
神威
iT邦研究生 4 級 ‧ 2017-07-20 14:32:18
select A,B from Table 
where B= (select min(B) from Table) ;

試試看

看更多先前的回應...收起先前的回應...
564219 iT邦新手 5 級 ‧ 2017-07-20 14:42:35 檢舉

這樣應該只會找出唯一一個最小的B值吧!

神威 iT邦研究生 4 級 ‧ 2017-07-20 15:54:16 檢舉

564219
可以找出所有0阿
http://ithelp.ithome.com.tw/upload/images/20170720/20102983w6qudT4Sfg.jpg
有圖為證

564219 iT邦新手 5 級 ‧ 2017-07-20 16:29:47 檢舉

等等,我再試試

小魚 iT邦大師 1 級 ‧ 2017-07-20 21:27:12 檢舉

看起來應該只能找出最小的B,跟樓主要的不大一樣。

564219 iT邦新手 5 級 ‧ 2017-07-21 08:40:33 檢舉

請教一下,如果是多欄位表單下這種條件的話,中間的資料會怎麼走?

神威 iT邦研究生 4 級 ‧ 2017-07-21 08:48:39 檢舉

就還是會以B= (select min(XX) from Table)為主
印出來

564219 iT邦新手 5 級 ‧ 2017-07-21 09:31:20 檢舉

多謝指教,我再試試

1
akila0321
iT邦見習生 ‧ 2017-07-20 14:41:06
select A,MIN(B) B
from tt1
group by A

我要發表回答

立即登入回答