Mysql使用窗口函数查询
最近在工作中,遇到一个需求,需要按最后更新时间倒序、同时相同的skuCode数据要展示在一起,那么就要使用窗口函数来现实了。sql如下:
SELECT subquery.*
FROM (SELECT *,MAX(last_update_time) OVER (PARTITION BY sku_code) AS max_last_update_timeFROM ap_table WHERE store_name = 'TK-F-US'
) AS subquery
ORDER BY subquery.max_last_update_time DESC, subquery.sku_code desc,subquery.last_update_time asc limit 100;
解析:
MAX(last_update_time) OVER (PARTITION BY sku_code)
表示每个 sku_code 组内取最大的更新时间(用于后续排序)。
结果如下:
原数据:
id | store_name | sku_code | last_update_time | max_last_update_time |
---|---|---|---|---|
7 | TK-F-US | SKU005 | 2025-06-24 16:00:00 | 2025-06-24 16:00:00 |
8 | TK-F-US | SKU002 | 2025-06-24 10:00:00 | 2025-06-24 10:00:00 |
5 | TK-F-US | SKU003 | 2025-06-23 14:00:00 | 2025-06-23 14:00:00 |
1 | TK-F-US | SKU003 | 2025-06-20 10:00:00 | 2025-06-23 14:00:00 |
3 | TK-F-US | SKU002 | 2025-06-21 12:00:00 | 2025-06-24 10:00:00 |
2 | TK-F-US | SKU001 | 2025-06-22 11:00:00 | 2025-06-22 11:00:00 |
4 | TK-F-US | SKU001 | 2025-06-19 09:00:00 | 2025-06-22 11:00:00 |
6 | TK-F-US | SKU004 | 2025-06-18 15:00:00 | 2025-06-18 15:00:00 |
查询结果:
排名 | id | store_name | sku_code | last_update_time | max_last_update_time |
---|---|---|---|---|---|
1 | 7 | TK-F-US | SKU005 | 2025-06-24 16:00:00 | 2025-06-24 16:00:00 |
2 | 8 | TK-F-US | SKU002 | 2025-06-24 10:00:00 | 2025-06-24 10:00:00 |
3 | 3 | TK-F-US | SKU002 | 2025-06-21 12:00:00 | 2025-06-24 10:00:00 |
4 | 5 | TK-F-US | SKU003 | 2025-06-23 14:00:00 | 2025-06-23 14:00:00 |
5 | 1 | TK-F-US | SKU003 | 2025-06-20 10:00:00 | 2025-06-23 14:00:00 |
6 | 2 | TK-F-US | SKU001 | 2025-06-22 11:00:00 | 2025-06-22 11:00:00 |
7 | 4 | TK-F-US | SKU001 | 2025-06-19 09:00:00 | 2025-06-22 11:00:00 |
8 | 6 | TK-F-US | SKU004 | 2025-06-18 15:00:00 | 2025-06-18 15:00:00 |