Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从数据库中选择最新的历史记录_Mysql_Sql_Database - Fatal编程技术网

Mysql 从数据库中选择最新的历史记录

Mysql 从数据库中选择最新的历史记录,mysql,sql,database,Mysql,Sql,Database,我有一个表order\u history,其中包含我对订单执行的所有操作的记录,如确认订单,尝试订单,拒绝订单或恢复订单 当员工将订单标记为“尝试”时,它将创建一个历史记录,并在一段时间后管理将该订单恢复到其原始位置(它也将创建历史记录)。之后,其他一些员工将相同的订单标记为尝试 问题 现在,history表中有两条相同顺序的记录。我只想选择最新的尝试的历史记录,因为以前的操作已还原 DB结构 |history_id |order_id | date_added |user_id | act

我有一个表
order\u history
,其中包含我对订单执行的所有操作的记录,如
确认订单
尝试订单
拒绝订单
恢复订单

当员工将订单标记为“尝试”时,它将创建一个历史记录,并在一段时间后管理
将该订单恢复到其原始位置(它也将创建历史记录)。之后,其他一些员工将相同的订单标记为
尝试

问题

现在,
history
表中有两条相同顺序的记录。我只想选择最新的
尝试的
历史记录,因为以前的操作已还原

DB结构

|history_id |order_id | date_added   |user_id | action_id|
|-----------|---------|--------------|--------|----------|
| 13        | 444     | 2018/07/06   |   9    |2         |
| 12        | 555     | 2018/07/05   |   7    |2         |
| 11        | 444     | 2018/07/05   |   2    |3         |
| 10        | 555     | 2018/07/05   |   2    |3         |
| 9         | 555     | 2018/07/05   |   4    |2         |
| 8         | 444     | 2018/07/04   |   1    |2         |
user\u id
=员工和操作id
2用于尝试
3用于恢复
时,当订单尝试恢复,然后其他员工再次尝试时,我的查询在员工A和B中复制订单,但它应显示在最新员工帐户中

我的查询

SELECT COUNT(oh.order_id) AS total_attempted,
       oh.user_id
FROM `order_history` oh 
WHERE oh.action_id = '2'
GROUP BY oh.user_id
结果

|history_id |order_id | date_added   |user_id | action_id|
|-----------|---------|--------------|--------|----------|
| 13        | 444     | 2018/07/06   |   9    |2         |
| 12        | 555     | 2018/07/05   |   7    |2         |
此查询向两个用户显示订单ID:555
,用户ID:4和7
,但应仅为用户7显示订单555

预期产出

|history_id |order_id | date_added   |user_id | action_id|
|-----------|---------|--------------|--------|----------|
| 13        | 444     | 2018/07/06   |   9    |2         |
| 12        | 555     | 2018/07/05   |   7    |2         |
PS:555号订单上的所有操作均在同一日期执行


让我知道是否需要更多详细信息。

您的预期输出与您尝试的代码不符。如果您只想要最新的尝试,那么您需要查看尝试和反转

drop table if exists oh;
create table oh (history_id int,order_id int,date_added varchar(100),user_id int,action_id int);
insert into oh (history_id ,order_id,date_added,user_id,action_id) values(13,444,"2018/07/06",9,2);
insert into oh (history_id ,order_id,date_added,user_id,action_id) values(12,555,"2018/07/05",7,2);
insert into oh (history_id ,order_id,date_added,user_id,action_id) values(11,444,"2018/07/05",2,3);
insert into oh (history_id ,order_id,date_added,user_id,action_id) values(10,555,"2018/07/05",2,3);
insert into oh (history_id ,order_id,date_added,user_id,action_id) values(9,555,"2018/07/05",4,2);
insert into oh (history_id ,order_id,date_added,user_id,action_id) values(8,444,"2018/07/04",1,2);
insert into oh values(7,333,"2018/07/04",1,3),(6,333,"2018/07/04",1,2),
(5,222,"2018/07/04",1,2),(4,222,"2018/07/04",2,2),
(3,111,"2018/07/04",1,2);
子查询s根据历史记录_id查找最新的操作(我假设这表示事件的顺序)

此代码列出了最新的尝试

select * from
(
select *
from   oh 
where  action_id in (2,3) and 
         history_id = (select max(history_id) from oh oh1 where oh1.order_id = oh.order_id)
) s
where s.action_id = 2;

+------------+----------+------------+---------+-----------+
| history_id | order_id | date_added | user_id | action_id |
+------------+----------+------------+---------+-----------+
|         13 |      444 | 2018/07/06 |       9 |         2 |
|         12 |      555 | 2018/07/05 |       7 |         2 |
|          5 |      222 | 2018/07/04 |       1 |         2 |
|          3 |      111 | 2018/07/04 |       1 |         2 |
+------------+----------+------------+---------+-----------+
4 rows in set (0.02 sec)
此代码统计尝试次数(不包括用户的撤销)


你能发布你的预期输出吗?更新了…请检查我不清楚你想要什么。我知道您想忽略恢复的订单,但如果订单已被确认或拒绝,该怎么办?或者你只是想要那些当前状态为“尝试”的人?