[英]Laravel 4 how to merge database tables and order them by created_at?
[英]How to order a group of rows by created_at?
我的訪問表如下所示:
ID | 姓名 | 網絡服務商 | created_at |
---|---|---|---|
1 | 傑克 | 康卡斯特 | 2021-03-13 01:00:00 |
2 | 傑克 | 康卡斯特 | 2021-03-13 01:01:00 |
3 | 湯姆 | 康卡斯特 | 2021-03-13 01:02:00 |
4 | 吉爾 | 亞馬遜 | 2021-03-13 01:03:00 |
5 | 傑克 | 康卡斯特 | 2021-03-13 01:50:00 |
6 | 吉爾 | 亞馬遜 | 2021-03-13 01:06:00 |
7 | 傑克 | 康卡斯特 | 2021-03-14 01:00:00 |
我想將“isp”分組在一起,然后根據每個組和組內第一行的最新 created_at 對組進行排序,按“created_at”和“名稱”排序。 結果表應如下所示
ID | 姓名 | 網絡服務商 | created_at |
---|---|---|---|
1 | 傑克 | 康卡斯特 | 2021-03-13 01:00:00 |
2 | 傑克 | 康卡斯特 | 2021-03-13 01:01:00 |
5 | 傑克 | 康卡斯特 | 2021-03-13 01:50:00 |
7 | 傑克 | 康卡斯特 | 2021-03-14 01:00:00 |
3 | 湯姆 | 康卡斯特 | 2021-03-13 01:02:00 |
4 | 吉爾 | 亞馬遜 | 2021-03-13 01:03:00 |
6 | 吉爾 | 亞馬遜 | 2021-03-13 01:06:00 |
我有以下代碼要按“isp”訂購,但我一直堅持如何根據第一個“created_at”訂購 isp 組。
SELECT * FROM visits
ORDER BY isp
您可以使用 window 函數:
order by max(created_at) over (partition by ip) desc,
ip,
max(created_at) over (partition by ip, name) desc,
name,
created_at desc
這些鑰匙是什么?
ip
的最大created_at
。ip
所以在平局的情況下,給定ip
的所有行都在一起。ip
的每個名稱的最大created_at
。name
,使每個名稱的行都在一起。created_at
。 如果您的 MySql 版本為 8.0+,請在ORDER BY
子句中使用MAX()
window function:
SELECT *
FROM visits
ORDER BY MAX(created_at) OVER (PARTITION BY isp) DESC, name, created_at
對於早期版本,使用相關子查詢:
SELECT v1.*
FROM visits v1
ORDER BY (SELECT MAX(v2.created_at) FROM visits v2 WHERE v2.isp = v1.isp) DESC,
name, created_at
請參閱演示。
ID | 姓名 | 網絡服務商 | created_at |
---|---|---|---|
1 | 傑克 | 康卡斯特 | 2021-03-13 01:00:00 |
2 | 傑克 | 康卡斯特 | 2021-03-13 01:01:00 |
5 | 傑克 | 康卡斯特 | 2021-03-13 01:50:00 |
7 | 傑克 | 康卡斯特 | 2021-03-14 01:00:00 |
3 | 湯姆 | 康卡斯特 | 2021-03-13 01:02:00 |
4 | 吉爾 | 亞馬遜 | 2021-03-13 01:03:00 |
6 | 吉爾 | 亞馬遜 | 2021-03-13 01:06:00 |
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.