MySql:如何使用两个datetime字段获取每个组的最新记录?

MySql:如何使用两个datetime字段获取每个组的最新记录?,mysql,Mysql,我有一张订单表格。我想获得每个用户id的最新记录按订单分组\u放置在\u处,在处创建前两条记录在处的顺序相同,但第一条记录是在处创建的最新记录,因此我将为用户77返回记录54447。 对于用户78,第4条和第5条记录在处的顺序相同,但第4条记录在处创建的顺序更高什么查询将返回我想要的结果?我一直在尝试不同的问题,但都一无所获 +-------+---------+-----------+----------------------------+--------------------------

我有一张
订单
表格。我想获得每个
用户id
的最新记录
按订单分组\u放置在\u处,在
处创建
前两条记录在处的顺序相同,但第一条记录是在处创建的最新记录,因此我将为用户77返回记录54447。
对于用户78,第4条和第5条记录在处的顺序相同,但第4条记录在处创建的顺序更高

什么查询将返回我想要的结果?我一直在尝试不同的问题,但都一无所获

+-------+---------+-----------+----------------------------+----------------------------+
| id    | user_id | amount    | order_placed_at            | created_at                 |
+-------+---------+-----------+----------------------------+----------------------------+
| 54447 |      77 | 488897.20 | 2020-09-10 19:50:00.000000 | 2020-09-11 04:22:27.031544 |
| 54441 |      77 | 488983.00 | 2020-09-10 19:50:00.000000 | 2020-09-11 04:22:26.635398 |
| 53783 |      77 | 500728.50 | 2020-09-10 19:20:00.000000 | 2020-09-11 04:21:18.816455 |
| 53784 |      77 | 500728.50 | 2020-09-09 19:20:00.000000 | 2020-09-11 04:21:18.816455 |
| 53785 |      77 | 500728.50 | 2020-09-09 19:20:00.000000 | 2020-09-11 04:21:10.816455 |
| 53786 |      77 | 500728.50 | 2020-09-08 19:20:00.000000 | 2020-09-11 04:21:18.816455 |
| 53787 |      77 | 500728.50 | 2020-09-08 19:20:00.000000 | 2020-09-11 04:20:10.816455 |
| 53788 |      77 | 500728.50 | 2020-09-07 19:20:00.000000 | 2020-09-11 04:21:18.816455 |
| 53789 |      77 | 500728.50 | 2020-09-07 19:20:00.000000 | 2020-09-11 04:19:10.816455 |
| 53790 |      77 | 500728.50 | 2020-09-06 19:20:00.000000 | 2020-09-11 04:21:18.816455 |
| 53791 |      77 | 500728.50 | 2020-09-06 19:20:00.000000 | 2020-09-11 04:19:10.816455 |
| 53792 |      77 | 500728.50 | 2020-09-06 19:19:00.000000 | 2020-09-11 04:19:10.816455 |
| 54493 |      78 | 489292.05 | 2020-09-10 19:50:00.000000 | 2020-09-11 04:22:24.673776 |
| 54494 |      78 | 489300.87 | 2020-09-10 19:50:00.000000 | 2020-09-11 04:22:24.176158 |
| 54495 |      78 | 489300.87 | 2020-09-09 19:50:00.000000 | 2020-09-11 04:52:24.176158 |
| 54496 |      78 | 489300.87 | 2020-09-09 19:50:00.000000 | 2020-09-11 04:42:20.176158 |
| 54497 |      78 | 489300.87 | 2020-09-08 19:50:00.000000 | 2020-09-11 04:22:24.176158 |
| 54498 |      78 | 489300.87 | 2020-09-08 19:50:00.000000 | 2020-09-11 04:22:20.176158 |
| 54499 |      78 | 489300.87 | 2020-09-07 19:50:00.000000 | 2020-09-11 05:22:24.176158 |
| 54500 |      78 | 489300.87 | 2020-09-07 19:50:00.000000 | 2020-09-11 04:22:20.176158 |
+-------+---------+-----------+----------------------------+----------------------------+
结果:

+-------+---------+-----------+----------------------------+----------------------------+
| id    | user_id | amount    | order_placed_at            | created_at                 |
+-------+---------+-----------+----------------------------+----------------------------+
| 54447 |      77 | 488897.20 | 2020-09-10 19:50:00.000000 | 2020-09-11 04:22:27.031544 |
| 53784 |      77 | 500728.50 | 2020-09-09 19:20:00.000000 | 2020-09-11 04:21:18.816455 |
| 53786 |      77 | 500728.50 | 2020-09-08 19:20:00.000000 | 2020-09-11 04:21:18.816455 |
| 53788 |      77 | 500728.50 | 2020-09-07 19:20:00.000000 | 2020-09-11 04:21:18.816455 |
| 53790 |      77 | 500728.50 | 2020-09-06 19:20:00.000000 | 2020-09-11 04:21:18.816455 |
| 54493 |      78 | 489292.05 | 2020-09-10 19:50:00.000000 | 2020-09-11 04:22:24.673776 |
| 54495 |      78 | 489300.87 | 2020-09-09 19:50:00.000000 | 2020-09-11 04:42:20.176158 |
| 54497 |      78 | 489300.87 | 2020-09-08 19:50:00.000000 | 2020-09-11 04:22:24.176158 |
| 54499 |      78 | 489300.87 | 2020-09-07 19:50:00.000000 | 2020-09-11 05:22:24.176158 |
+-------+---------+-----------+----------------------------+----------------------------+
编辑: 用户77有第9/6天、第9/7天、第9/8天、第9/9天和第9/10天的记录,因此我需要每天的最新记录 用户78有第9/7天、第9/8天、第9/9天和第9/10天的记录,所以我想要这些天的最新记录


我更新了我的问题马尔科明中心


您可以在

select distinct on (t.user_id) t.*
from your_table t
order by t.user_id, t.created_at desc, t.order_placed_at desc

我希望这个答案能解决您的问题。

我得到一个错误:您的SQL语法有一个错误;查看与您的MySQL服务器版本对应的手册,以了解可在“on(t.user_id)t.*”附近使用的正确语法。第1MySQL行不支持DISTINCT on。我收到此错误:您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以了解要使用的正确语法(接近'rn from order'))从cte中选择*其中第行的rn=11@MalcolmInTheCenter打字错误括号丢失了。已编辑。我忘了提到我想要每个用户id每天的最后一条记录。那可能吗?我编辑了我的结果查询。@malcolmin输入每个用户\u id每天的最后记录。在窗口定义中更改
partitionby
表达式,并按
DATE(datetime\u列)
添加分区级别。很抱歉,我从未使用过
partitionby
不确定您的意思。你能编辑你的答案吗?
WITH cte AS 
( SELECT *, 
         ROW_NUMBER() OVER (PARTITION BY user_id, DATE(order_placed_at) ORDER BY order_placed_at DESC, created_at DESC) rn
         FROM test 
)
SELECT *
FROM cte
WHERE rn = 1
ORDER BY user_id, order_placed_at DESC
select distinct on (t.user_id) t.*
from your_table t
order by t.user_id, t.created_at desc, t.order_placed_at desc