2015-08-03 40 views
2

我正在尋找下一個最低日期,大於今天的select語句。 我將數據簡化爲例子。SQL Server 2005下一個最低日期大於今天

實施例的數據:table_1

name order_no order_date Due_date Run_no 
customer1 abc1 01/04/2015 02/05/2015 1 
customer2 def2 02/04/2015 02/05/2015 2 
customer3 ghi1 03/04/2015 02/05/2015 3 
customer2 def3 04/04/2015 04/05/2015 2 
customer2 def4 05/04/2015 05/05/2015 2 

和示例查詢:

select 
    name, 
    order_no, 
    order_date, 
    Due_date, 
    Run_no 
from 
    table_1 
where 
    run_no = '2' 
group by 
    name, order_no, Order_date, Due_date, Run_no 
having 
    MIN(due_date) > DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) 

因此,如果今天是2015年1月5日我期望的結果是:

name order_no order_date Due_date Run_no 
customer2 def2 02/04/2015 02/05/2015 2 

但我實際得到的是:

name order_no order_date Due_date Run_no 
customer2 def2 02/04/2015 02/05/2015 2 
customer2 def3 04/04/2015 04/05/2015 2 
customer2 def4 05/04/2015 05/05/2015 2 

這一定與Some條款有關,不是嗎? 感謝

+0

我建議使用ROW_NUMBER()排名功能。 –

回答

0

爲什麼不只是這樣的事情:

Select top(1) 
name, 
order_no, 
order_date, 
Due_date, 
Run_no 
from table_1 
Where run_no ='2'and MIN(due_date) > DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) 

我不明白,爲什麼你把一組通過。如果需要,可以通過order_no添加一個訂單。

+0

歡呼聲, 會有多個結果,而不僅僅是一個,這就是爲什麼我有句子,這反過來又需要一個分組。 我正在尋找符合該標準的所有結果,而不僅僅是頂級的結果 – scamper

+1

如果沒有'order by'子句,永遠不要使用'top'子句,否則結果將是隨機的且不明確排序。 – jpw

0

似乎沒有必要使用group by。我會建議只需按升序來選擇它們。這將顯示所有符合標準的值,其次是最低的,比今天更高。

select < your columns > 
from table_1 
Where run_no ='2' and due_date > DATEADD(day, DATEDIFF(day, 0,GETDATE()), 0) 
order by due_date 
1

與SQL Server 2005開始,你可以使用row_number功能的行數,如果你這樣做,根據日期(在設置你指定的起始日期之後落在行),它只是一個選擇的問題以數字1

select 
    name, 
    order_no, 
    order_date, 
    Due_date, 
    Run_no  
from 
    (select 
     *, 
     rn = row_number() over (partition by name order by due_date asc) 
    from table_1 
    where 
     run_no = '2' and 
     Due_date > DATEADD(day, DATEDIFF(day, 0, GETDATE()), 0) 
) t 
where rn = 1; 

功能的partition by部分使得它如此的行號從1重新啓動分區中的每個新項目(客戶),這樣你可以得到很多客戶的匹配行的行。這可能不是你想要的 - 也許你只是一個單獨的行,或者你想通過run_no和customer分區,你的問題並沒有真正說明。

相關問題