Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/65.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通过group by检索JOIN中的最后一条记录_Mysql_Join_Group By - Fatal编程技术网

MySQL通过group by检索JOIN中的最后一条记录

MySQL通过group by检索JOIN中的最后一条记录,mysql,join,group-by,Mysql,Join,Group By,我有以下数据表: 1.表格跟进as: mysql> select * from follow_up; +--------------+----------------+--------------------------------------------------+-------------------+---------+---------------+-----------+---------------+----------+ | follow_up_id | feedback_

我有以下数据表:

1.表格
跟进
as:

mysql> select * from follow_up;
+--------------+----------------+--------------------------------------------------+-------------------+---------+---------------+-----------+---------------+----------+
| follow_up_id | feedback_close | feedback_open                                    | is_email_required | is_Open | reminder_date | client_id | conclusion_id | stage_id |
+--------------+----------------+--------------------------------------------------+-------------------+---------+---------------+-----------+---------------+----------+
|            1 | NULL           | dsffsdfsdfsd                                     |                 1 |       1 | 2017-09-20    |       101 |            96 |       72 |
|            2 | NULL           | FSGDFHFGHFG                                      |                 1 |       1 | 2017-09-28    |       101 |           251 |       72 |
|            3 | NULL           | Tender stage fb                                  |                 0 |       1 | NULL          |       101 |            98 |      163 |
|            4 | NULL           | Call back tender stage update date from 28 to 30 |                 1 |       1 | 2017-09-28    |       101 |            96 |      163 |
|            5 | NULL           | Metting follow up for next meeting               |                 1 |       1 | 2017-10-02    |       101 |            96 |       73 |
+--------------+----------------+--------------------------------------------------+-------------------+---------+---------------+-----------+---------------+----------+
2。表
日志
为:

mysql> SELECT *  from logs where transaction = 'FLWUP';
+---------+---------+---------------------+---------+-------------+
| user_id | menu_id | logs_time           | tran_id | transaction |
+---------+---------+---------------------+---------+-------------+
|      84 |      69 | 2017-09-19 19:31:04 |       1 | FLWUP       |
|      84 |      69 | 2017-09-19 19:31:25 |       2 | FLWUP       |
|      84 |      69 | 2017-09-20 19:10:41 |       2 | FLWUP       |
|      84 |      69 | 2017-09-21 12:35:01 |       3 | FLWUP       |
|      84 |      69 | 2017-09-21 12:35:26 |       4 | FLWUP       |
|      84 |      69 | 2017-09-21 12:36:16 |       4 | FLWUP       |
|      84 |      69 | 2017-09-21 12:38:30 |       5 | FLWUP       |
+---------+---------+---------------------+---------+-------------+
7 rows in set (0.00 sec)                                           
3。表
allcode
as:

mysql> select * from allcode where code_type like 'MARK%';
+------------------+---------+------+----------------------+
| code_type        | code_id | srno | code_name            |
+------------------+---------+------+----------------------+
| MARKETING_STAGES |      72 |    1 | Enquiry              |
| MARKETING_STAGES |      73 |    3 | Meeting              |
| MARKETING_STAGES |      74 |    4 | Presentation         |
| MARKETING_STAGES |     163 |    2 | Tender               |
+------------------+---------+------+----------------------+
11 rows in set (0.00 sec)
我调用了一个查询,结果如下:

mysql> select f.follow_up_id,f.feedback_open, f.feedback_close, f.reminder_date, 
ast.code_name as stage, ac.code_name as conclusion, max(l.logs_time)  
from follow_up f 
join logs l on l.tran_id = f.follow_up_id 
join allcode ast on ast.code_id = f.stage_id 
join allcode ac on ac.code_id = f.conclusion_id 
where l.transaction='FLWUP' and f.client_id = 101 
group by ast.code_name order by ast.srno;
+--------------+------------------------------------+----------------+---------------+---------+------------+---------------------+
| follow_up_id | feedback_open                      | feedback_close | reminder_date | stage   | conclusion | max(l.logs_time)    |
+--------------+------------------------------------+----------------+---------------+---------+------------+---------------------+
|            1 | dsffsdfsdfsd                       | NULL           | 2017-09-20    | Enquiry | Call Back  | 2017-09-20 19:10:41 |
|            3 | Tender stage fb                    | NULL           | NULL          | Tender  | Next       | 2017-09-21 12:36:16 |
|            5 | Metting follow up for next meeting | NULL           | 2017-10-02    | Meeting | Call Back  | 2017-09-21 12:38:30 |
+--------------+------------------------------------+----------------+---------------+---------+------------+---------------------+
3 rows in set (0.00 sec)
但我希望结果是:

+--------------+-----------------------------------------------------+----------------+---------------+---------+------------+---------------------+
| follow_up_id | feedback_open                                       | feedback_close | reminder_date | stage   | conclusion | max(l.logs_time)    |
+--------------+-----------------------------------------------------+----------------+---------------+---------+------------+---------------------+
|            2 | FSGDFHFGHFG                                         | NULL           | 2017-09-20    | Enquiry | Call Back  | 2017-09-20 19:10:41 |
|            4 | Call back tender stage update date from 28 to 30    | NULL           | NULL          | Tender  | Next       | 2017-09-21 12:36:16 |
|            5 | Metting follow up for next meeting                  | NULL           | 2017-10-02    | Meeting | Call Back  | 2017-09-21 12:38:30 |
+--------------+-----------------------------------------------------+----------------+---------------+---------+------------+---------------------+
3 rows in set (0.00 sec)
我无法加入并分组以获得所需的结果

随访
结论id
列和
阶段id
是指表
所有代码的
代码id

问题:
我想要的结果是

  • 分组依据
    阶段id
  • 所有代码的排序依据
    srno
    ,以及
  • 上次/最近的
    follow\u-up\u id
    follow\u-up
  • 包括我的答案,需要的完整分组的原始问题,以及演示中Reupal的答案。您缺少conclusionID的示例数据中的值,所以我只是基于ID创建了它们(现在更新为ISO,但缺少98)

    在本专栏中,我的结果与你的不匹配;但我相信你的预期结果是错误的

    当存在多个stage\u ID时,似乎需要每个stage\u ID的max follow\u up\u ID

    这可以通过派生表/内联视图来处理,该派生表/内联视图获取按stage\u ID分组的max follow\u UP\u ID,并将其连接回您的集合。将结果限制为仅包括每个阶段ID的最大后续ID

    我也不喜欢mySQL的扩展GROUPBY,我更喜欢在GROUPBY中包含select中未聚合的所有列。使用扩展的分组方式往往会隐藏潜在的问题。在这种情况下,仅通过ast.code_名称进行分组允许引擎从其他列中选择一个非不同的值。您最终没有得到所需的结果,而且它隐藏了这样一个事实:如果不是由于使用/误用扩展组,您将在查询中获得多条记录

    SELECT f.follow_up_id,f.feedback_open, f.feedback_close, f.reminder_date, 
    ast.code_name as stage, ac.code_name as conclusion, max(l.logs_time)  
    from follow_up f 
    join logs l on l.tran_id = f.follow_up_id 
    join allcode ast on ast.code_id = f.stage_id 
    join allcode ac on ac.code_id = f.conclusion_id 
    JOIN SELECT max(follow_up_ID) MFID, stage_ID 
          FROM follow_up 
          GROUP BY stage_ID) Z 
      on f.follow_up_ID = Z.MFID 
     and F.Stage_ID = Z.Stage_ID
    WHERE l.transaction='FLWUP' and f.client_id = 101 
    GROUP BY f.follow_up_id,f.feedback_open, f.feedback_close, f.reminder_date, 
    ast.code_name , ac.code_name
    ORDER BY ast.srno;
    

    请尝试下面的内容,注意顺序并按顺序分组

    select f.follow_up_id,f.feedback_open, f.feedback_close, f.reminder_date, 
    ast.code_name as stage, ac.code_name as conclusion, max(l.logs_time)  
    from follow_up f 
    join logs l on l.tran_id = f.follow_up_id 
    join allcode ast on ast.code_id = f.stage_id 
    join allcode ac on ac.code_id = f.conclusion_id 
    where l.transaction='FLWUP' and f.client_id = 101 
    group by follow_up.stage_id order by ast.srno, follow_up.follow_up_id DESC;
    
    这应该是可行的,如果不是这样,那么您应该搜索如何设置多列的顺序


    参考文章-

    所有代码都是跟进表的父表吗?在“跟进”表的“跟进id”列上设置顺序不是一件坏事,但请看:我真的不理解父子关系,但是
    stage\u id
    conclusion\u id
    follow\u-up
    表格只不过是
    code\u id
    allcode
    @Rupal我在这里输入的结果,所以我错过了一些东西,我会更新我的问题,我会尝试让你知道,同时还有其他解决方法谢谢现在的工作,我以前尝试过这一点,但我使用select after
    =
    符号,并给了我多个返回列的错误,所以我没有进一步尝试,为什么按这么多列分组,
    按ast分组。code\u name
    给出相同的结果创建原始查询,并使用分组依据中的所有字段运行它。你会看到你得到的是5条记录,而不是3条。group by对您隐藏记录,因为您没有按所有唯一列进行分组。mySQL更高版本在默认情况下禁用了此功能。这是一个很好的特性,但在您完全理解聚合和分组之前,它通常会导致混乱。当返回的字段中的所有其他值相同时,只应按较少的字段分组。你的问题并非如此;因此,您的问题的一部分因为我使用hibernate,我对sql查询知之甚少,所以很难理解查询感谢您宝贵的时间,@xQbert的解决方案为meThis提供了返回IDs1,4,5的服务。测试:根据需要更改您的表格,并进行跟进。
    分组中的成员需要为
    f.