SQL查詢:取得每位使用者的最後記錄日期和值
資料庫中儲存著使用者的登入記錄,任務是為每個不同的使用者檢索其最近的登入日期及其對應的值。下表顯示了包含此資料的表,欄位包括使用者名稱、日期和值:
**用户名** | **日期** | **值** |
---|---|---|
brad | 2010年1月2日 | 1.1 |
fred | 2010年1月3日 | 1.0 |
bob | 2009年8月4日 | 1.5 |
brad | 2010年2月2日 | 1.2 |
fred | 2009年12月2日 | 1.3 |
用於檢索每個使用者的最新記錄日期和值的SQL查詢
以下是兩種檢索每位使用者的最新記錄日期和值的方法:
方法一:使用自連接
這種經典方法利用自連接將表與自身匹配(基於用戶名),並使用MAX()聚合函數為每個用戶檢索最大日期:
<code class="language-sql">SELECT t.username, t.date, t.value FROM MyTable t INNER JOIN ( SELECT username, MAX(date) AS MaxDate FROM MyTable GROUP BY username ) tm ON t.username = tm.username AND t.date = tm.MaxDate;</code>
方法二:使用視窗函數(如果支援)
視窗函數提供了一種更有效率的替代方法,避免了由日期相等引起的重複記錄問題。此方法使用ROW_NUMBER()函數對按使用者名稱分區的、按日期降序排序的結果集進行操作:
<code class="language-sql">SELECT x.username, x.date, x.value FROM ( SELECT username, date, value, ROW_NUMBER() OVER (PARTITION BY username ORDER BY date DESC) AS _rn FROM MyTable ) x WHERE x._rn = 1;</code>
這些查詢將產生以下結果,顯示每個使用者的最新登入日期和值:
**用户名** | **日期** | **值** |
---|---|---|
brad | 2010年2月2日 | 1.2 |
fred | 2010年1月3日 | 1.0 |
bob | 2009年8月4日 | 1.5 |
以上是如何在 SQL 中找到每個使用者的最新登入日期和值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!