問題:
請問如何從多筆資料中獲取最小值?
回答
我觀察你的資料結構跟結果,你應該是要比對兩個欄位
從中比較得到最小的值吧
以下是我的寫的測試跟範例
--建立測試資料
create table #Tem_Table ([ID] int,val1 int,val2 int );
insert into #Tem_Table ([ID],val1,val2) values
(1,777,184)
,(2,5616,205)
,(3,3,20)
;
select * from #Tem_Table;
--方法一:SQL版本
with Tem_Table as (
select id
,case when val2>val1 then val1 --藉由比值把兩個欄位合併成一個最小值欄位
else val2
end as min_value
from #Tem_Table
)
select * from Tem_Table T100
where T100.min_value = (select min(min_value) from Tem_Table ); --篩選出最小值
得到結果:
成品估算: 0.0065869
--方法二:T-SQL版本
declare @最小值 int ,@val1欄最小值 int , @val2欄最小值 int
select @val1欄最小值 = (select min(val1) val from #Tem_Table)
select @val2欄最小值 = (select min(val2) val from #Tem_Table)
IF( @val1欄最小值 < @val2欄最小值 )
BEGIN
select id,val1 min_value from #Tem_Table T100
where T100.val1 = @val1欄最小值;
END ;
IF( @val2欄最小值 < @val1欄最小值 )
BEGIN
select id,val2 min_value from #Tem_Table T100
where T100.val2 = @val2欄最小值;
END ;
結果:
成品估算:
0.0032945 * 4 = 0.013178
結論:
用第一個比較好
先做由小到大的排序,然後取第一筆就好
SELECT TOP(1) *
FROM myTable
ORDER BY val1
--只想取id和val1的話就把 * 換成欄位名稱
SELECT TOP(1) id,val1
FROM myTable
ORDER BY val1
如果最小值有一筆以上的資料,就用下面這種方式
SELECT *
FROM myTable
WHERE val1 IN (SELECT MIN(val1) FROM myTable)
記得以上的myTable都要改成你的資料表名稱