挑戰:
在包含時間戳記和狀態標誌(「in」或「out」)的資料庫表中有效地為每個使用者選擇最新記錄可能很複雜,特別是當使用者有多個條目共享相同的最新時間戳時。
方法:
使用兩個不同的 SQL 查詢解決了這個問題:
1。查詢多筆符合記錄:
此查詢標識每個使用者俱有最大時間戳記的所有記錄。
<code class="language-sql">SELECT t1.* FROM lms_attendance t1 WHERE t1.time = (SELECT MAX(t2.time) FROM lms_attendance t2 WHERE t2.user = t1.user);</code>
輸出:
ID | USER | TIME | IO |
---|---|---|---|
2 | 9 | 1370931664 | out |
3 | 6 | 1370932128 | out |
5 | 12 | 1370933037 | in |
2。查詢單一符合記錄:
此查詢僅傳回每個使用者的單一最新記錄,在時間戳關係的情況下優先考慮最高 ID。
<code class="language-sql">SELECT t1.* FROM lms_attendance t1 WHERE t1.id = (SELECT t2.id FROM lms_attendance t2 WHERE t2.user = t1.user ORDER BY t2.time DESC, t2.id DESC LIMIT 1);</code>
輸出:
ID | USER | TIME | IO |
---|---|---|---|
2 | 9 | 1370931664 | out |
3 | 6 | 1370932128 | out |
5 | 12 | 1370933037 | in |
說明:
MAX(time)
),然後擷取與該時間戳記相符的所有項目。這可以處理多個記錄具有相同最新時間戳記的情況。 ORDER BY time DESC, id DESC
優先考慮最新時間戳,然後是最高 ID,確保使用 LIMIT 1
.在這些查詢之間進行選擇取決於您是否需要具有最新時間戳記的所有記錄,還是僅需要每個使用者的單一最新記錄。 當只需要一筆記錄時,第二個查詢提供了更簡潔的解決方案。
以上是如何使用時間戳記選擇資料庫中每個使用者的最新行?的詳細內容。更多資訊請關注PHP中文網其他相關文章!