table is rpt custID dates stores 111089 2015-09-28 103 111089 2015-06-19 119 111089 2015-10-11 106 555555 2015-05-02 103 555555 2015-08-21 125 555555 2015-09-20 125 123456 2015-01-01 119 123456 2015-05-13 116 123456 2015-09-15 120 123456 2015-08-29 115 result should be custID dates store 111089 2015-06-19 119 555555 2015-05-02 103 123456 2015-01-01 119 the table is a very big table and I need all custID and store with the earliest date. like the result above. only one row per custID
回答
您可以在客戶ID一個PARTITION
和排序按日期與窗口函數做到這一點:
;With Cte As
(
Select *, Row_Number() Over (Partition By CustID Order By Dates Asc) As Row_Number
From rpt
)
Select custID, dates, stores
From Cte
Where Row_Number = 1
太好了。驚人。它的作品像一個魅力。非常感謝你。你爲我節省了很多時間。 rpt是同一張表上的一個選擇,所以我只是將選擇放在那裏,它只是工作。簡直太神奇了。再次感謝..... –
SELECT rpt.custid, rpt.date, rpt2.stores
FROM (select r.custid, min(r.DATE) as 'Date'
from rpt r
group by r.custid) rpt
left join (select r.custid, r.DATE, r.stores
from rpt r) rpt2 on rpt2.custid = rpt.custid and rpt2.date = rpt.date
這將產生正確的結果,但過於複雜,性能將受到影響,因爲您必須用相同的數據兩次查詢相同的數據。 –
通過創建/填充cte然後查詢它,數據被擊中兩次,對嗎?我對性能差異感到好奇......如果你能詳細說明,將不勝感激。 –
因爲cte不會在第二個select語句所在的位置導致第二個表掃描。我將以一個sqlfiddle作爲例子。然後你可以在你的系統上試用它,你會明白我的意思。 –
- 1. 如何獲得每組最早日期的記錄
- 2. 挑選最早的日期記錄
- 3. 獲得通過的日期時間最後一排的SQL Server
- 4. 如何查找存儲在SQL Server 2008中的表中最早的記錄?
- 5. 最近2條記錄之間的日期範圍Sql Server 2008
- 6. 如何獲取記錄從日期到日期的SQL Server
- 7. 如何以最早的日期返回記錄?
- 8. 如何FINDE插入記錄的日期在SQL Server 2008
- 9. 如何獲得一個月的日期字段在SQL Server 2008
- 10. 如何獲得使用SQL Server 2008一週的開始日期
- 11. SQL Server 2008:如何更新以前記錄的結束日期列
- 12. 得到最早的日期
- 13. 獲取最早的記錄
- 14. SQL Server:如何獲得平均日期
- 15. 獲取親子記錄SQL Server 2008中
- 16. 如何獲得最早日期以編程方式獲得Excel支持
- 17. 獲得最早日期爲每個ID
- 18. 在SQL Server中的兩個日期之間獲得編號2008
- 19. SQL查詢來獲取最早日期
- 20. SQL獲取最後記錄按日期
- 21. SQL查詢獲取最早日期
- 22. SQL Server存儲過程添加新記錄時轉儲最早的X記錄
- 23. 以MAX日期獲得記錄
- 24. C#或SQL Server - 如何從多個日期表中獲取最早或最晚的日期?
- 25. SQL最新日期記錄
- 26. 如何從sql server 2008中獲取表中的唯一記錄
- 27. 如何通過JSLQ獲得最高的最高記錄?
- 28. 如何根據最大日期獲取不同記錄?
- 29. SQL加入以獲得最新記錄
- 30. 如何獲得的記錄數在SQL
看一看這個類似的[問題](http://stackoverflow.com/questions/3800551/select-first-row-in-each-group-by-group)。 –