MySQL : Select three last item INNER JOIN

标签 mysql inner-join union var multiple-tables

只是对 MySQL 进行了棘手的阻止。 我有 3 张 table :

电视

| TV_ID  |  TV_name  |
----------------------
|    1   |    HBO    |
|    2   |    BBC    |
|    3   |  Fox news |
----------------------
----------------------
----------------------

排放

| E_ID | E_TV_ID |   E_NAME   |
-------------------------------
|   1  |    1    |   Weather  |
|   2  |    1    |   News     |
|   3  |    1    |   FAKE1    |
|   4  |    1    |   FAKE2    |
|   5  |    1    |   FAKE3    |
|   6  |    1    |   FAKE4    |
|   7  |    2    |   FAKE5    |
|   8  |    2    |   FAKE6    |
|   9  |    2    |   FAKE7    |
|   10 |    2    |   FAKE8    |
|   11 |    2    |   FAKE9    |
|   12 |    2    |   FAKE10   |
|   13 |    2    |   FAKE11   |
|   14 |    3    |   FAKE12   |
|   15 |    3    |   FAKE13   |
|   16 |    3    |   FAKE14   |
|   17 |    3    |   FAKE15   |
|   18 |    3    |   FAKE16   |
|   19 |    3    |   FAKE17   |
|   20 |    3    |   FAKE18   |
-------------------------------
-------------------------------
-------------------------------

重播

| R_ID | R_E_ID |  R_DATE  | R_URL_REPLAY |
-------------------------------------------
|  1   |   1    | 20150431 |     URL1     |
|  2   |   20   | 20150431 |     URL2     |
|  3   |   19   | 20150431 |     URL3     |
|  4   |   2    | 20150431 |     URL4     |
|  5   |   7    | 20150431 |     URL5     |
|  6   |   16   | 20150430 |     URL6     |
|  7   |   10   | 20150430 |     URL7     |
|  8   |   1    | 20150430 |     URL8     |
|  9   |   4    | 20150430 |     URL9     |
|  10  |   9    | 20150430 |     URL10    |
|  11  |   19   | 20150429 |     URL11    |
|  12  |   2    | 20150429 |     URL12    |
|  13  |   1    | 20150429 |     URL13    |
|  14  |   12   | 20150429 |     URL14    |
-------------------------------------------
-------------------------------------------
-------------------------------------------

我只想创建一个查询来获取每台电视的倒数第三个发射,按日期和电视排序(如果可能)。 在这个例子中,我有 3 台电视。 3*3 = 9 次排放,例如:

| TV_ID  |  E_NAME   | R_URL_REPLAY |
-------------------------------------
|    1   |  Weather  |     URL1     |
|    1   |   FAKE2   |     URL4     |
|    1   |   FAKE6   |     URL8     |
|    2   |   FAKE3   |     URL5     |
|    2   |   FAKE8   |     URL7     |
|    2   |   FAKE7   |     URL10    |
|    3   |   FAKE18  |     URL2     |
|    3   |   FAKE17  |     URL3     |
|    3   |   FAKE14  |     URL6     |

我尝试了很多解决方案(INNER JOIN -- SELECT .. FROM ( SELECT ...) -- Use var @:= -- Sub-sub-sub-sub query )但不起作用。 仅当我使用 UNION 时才有效,但我有 20 多个电视,写 20 UNION 真的很丑..

如果您有建议,

提前致谢,

最佳答案

这并不简单,但简而言之,按电视和日期对重播进行排序,然后对它们进行排名,然后选择符合您的排名标准的重播。

select * 
  from (
    select if(@prev = e_tv_id, @rank := @rank +1, @rank := 1 and @prev := e_tv_id) as rank, q.*
      from ( 
        select e.e_tv_id, r_date, r_url_replay
          from emission e
          join (select @prev := 0, @rank := 1) q
            inner join replay r
            on r.r_e_id = e.e_id
        order by e.e_tv_id asc, r.r_date desc
     ) q
  ) qq
where rank <=3 ;

demo here

关于MySQL : Select three last item INNER JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29942935/

相关文章:

mysql - 一张表中的两个 ID 链接回父表。如何显示两个 ID 的名称?

mysql - 覆盖 MySQL UNION 中的隐含数据库?

mysql - 如何使用 null||d.AM_Answer 进行选择查询

php - 连接 MySQL 信息和 2 个表

MySQL比较一个表中字段的值与不同表中行的值

sql - 在 SQL 中使用 UNION 垂直连接表行

mysql - SQL for WP 删除具有多个元键和注释的用户

mysql - libmemcached 路径?

mysql - 当查询结果返回不匹配时需要显示替代文本

MySQL 错误 1215 : Cannot add foreign key constraint