【问题标题】:Need help constructing MySQL Query需要帮助构建 MySQL Query
【发布时间】:2013-02-11 02:01:11
【问题描述】:

我的数据&表格如下:

+------+------------+-----------+--------------+------------+----------+-------------+
| sr   | thread_id  | thread_no | client_name  | date       | time     | status      |
+------+------------+-----------+--------------+------------+----------+-------------+
|  871 | 1281473902 |         0 | Demo Company | 2011-01-17 | 16:53:00 | Closed      |
| 1179 | 1269343346 |         0 | Demo Company | 2010-03-23 | 11:22:00 | Open        |
| 1180 | 1269343585 |         0 | Demo Company | 2010-03-23 | 11:26:00 | Closed      |
| 1181 | 1269343679 |         0 | Demo Company | 2010-03-23 | 11:27:00 | Open        |
| 1182 | 1269343835 |         0 | Demo Company | 2010-03-23 | 11:30:00 | Open        |
| 2392 | 1295285762 |         0 | Demo Company | 2011-01-17 | 17:35:00 | Closed      |
| 2393 | 1295286578 |         0 | Demo Company | 2011-01-18 | 08:01:00 | Open        |
| 2526 | 1299764352 |         0 | Demo Company | 2011-04-29 | 11:01:00 | Closed      |
| 8727 | 1299764352 |         1 | Demo Company | 2011-06-16 | 09:31:00 | Closed      |
| 8728 | 1299764352 |         2 | Demo Company | 2011-06-16 | 09:56:00 | Closed      |
| 8729 | 1299764352 |         3 | Demo Company | 2011-06-16 | 09:57:00 | Closed      |
| 8731 | 1308234742 |         0 | Demo Company | 2011-06-16 | 10:31:00 | Open        |
| 8734 | 1308236479 |         0 | Demo Company | 2011-06-16 | 11:00:00 | Open-Urgent |
| 8735 | 1308236519 |         0 | Demo Company | 2011-06-16 | 11:01:00 | On Hold     |
| 8736 | 1308236519 |         1 | Demo Company | 2011-06-16 | 11:02:00 | Closed      |
| 8740 | 1308242129 |         0 | Demo Company | 2011-06-16 | 12:34:00 | Closed      |
| 8796 | 1308242129 |         1 | Demo Company | 2011-06-24 | 06:27:00 | Closed      |
| 8798 | 1308242129 |         2 | Demo Company | 2011-06-24 | 07:43:00 | Open        |
| 8799 | 1308242129 |         3 | Demo Company | 2011-06-24 | 07:44:00 | Open        |
+------+------------+-----------+--------------+------------+----------+-------------+

我需要选择具有 DISTINCT thread_id 并且该不同 thread_id 具有最高 thread_no 值的 ROWS

例如对于thread_id 1299764352,我需要选择sr=8729的行

我可以通过这个查询得出结论:

SELECT sr, thread_id, max(thread_no) as thread_no, client_name, date, time, status 
    FROM table 
    group by thread_id 
    order by sr

但是这个查询给了我 thread_no=0 的行,而不是 thread_no 值最高的行

希望我能解释清楚。

请帮忙。

谢谢 呸

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    我猜你需要以下查询:

    SELECT * FROM table AS a
    WHERE NOT EXISTS (
    SELECT * FROM table AS b 
    WHERE b.thread_id = a.thread_id AND b.thread_no > a.thread_no )
    

    【讨论】:

    • 您可以通过选择代码并单击{} 按钮使您的代码看起来像代码。
    • 那么您不会这么好心批准我的回答吗? :)
    【解决方案2】:

    试试:

    SELECT * FROM table 
    GROUP BY thread_id 
    ORDER BY MAX(thread_no) DESC, sr ASC
    

    【讨论】:

    • @Grigor Gevorgyan 提供的解决方案非常完美。谢谢@Grigor Gevorgyan
    • @vai:无论哪种解决方案都适合您。首先检查它是否有效,然后检查速度差异。 ;)
    【解决方案3】:

    我猜您正在寻找分析函数“partition by”。 请参阅this 文章。

    【讨论】:

      【解决方案4】:
      SELECT m.* 
      FROM myTable AS m
        JOIN
          ( SELECT thread_id
                 , MAX(thread_no) AS max_no
            FROM myTable
            GROUP BY thread_id
          ) AS grp
          ON m.thread_id = grp.thread_id
          AND m.thread_no = grp.max_no
      

      或像这样(感谢Quassnoi):

      SELECT m.* 
      FROM 
          ( SELECT DISTINCT thread_id
            FROM myTable
          ) AS md
        JOIN myTable AS m
          ON m.sr =
            ( SELECT mi.sr
              FROM myTable mi
              WHERE mi.thread_id = md.thread_id
              ORDER BY mi.thread_no DESC
              LIMIT 1
            ) 
      

      【讨论】:

        猜你喜欢
        • 2012-02-21
        • 2016-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-28
        • 1970-01-01
        • 1970-01-01
        • 2022-07-04
        相关资源
        最近更新 更多