【问题标题】:MySQL select latest distinct records from user where with latest dateMySQL从具有最新日期的用户中选择最新的不同记录
【发布时间】:2017-03-15 18:40:44
【问题描述】:

我有一张叫“lift”的桌子:

-----------------------------------------------------
|   ID   |   USERNAME   |  lift_ID    |    DATE    |
-----------------------------------------------------
|   1    |     user1    |      0      | 2013-06-01 |
-----------------------------------------------------
|   2    |     user1    |      0      | 2013-06-03 |
-----------------------------------------------------
|   3    |     user1    |      1      | 2013-06-03 |
-----------------------------------------------------
|   4    |     user2    |      0      | 2013-06-04 |
-----------------------------------------------------
|   5    |     user2    |      1      | 2013-06-04 |
-----------------------------------------------------
|   6    |     user2    |      1      | 2013-06-05 |
-----------------------------------------------------
|   7    |     user1    |      2      | 2013-06-03 |

我想从某个用户中选择所有不同的lift_id,其中日期是该用户的lift_id 中的最新日期。

如果我为 user1 这样做,我会得到:

-----------------------------------------------------
|   2    |     user1    |      0      | 2013-06-03 |
-----------------------------------------------------
|   3    |     user1    |      1      | 2013-06-03 |
-----------------------------------------------------
|   7    |     user1    |      2      | 2013-06-03 |

我试过了:

SELECT * 
  FROM lift l1 
 WHERE date` = (
       SELECT MAX(date)
         FROM lift 
        WHERE l1.lift_id = lift.lift_id)
          AND username = 'user1'
        ORDER BY lift_id ASC
       )
 ;

该选择在最大日期所有不同的提升,但没有考虑到我想要的不同用户。

【问题讨论】:

    标签: php mysql sql date select


    【解决方案1】:

    您的查询已结束。您需要在子查询中添加额外的关联子句:

    SELECT l.*
    FROM lift l
    WHERE l.date = (select max(l2.date)
                    from lift l2
                     where l2.lift_id = l.lift_id and
                          l2.username = l.username
                   ) and
          l.username = 'user1'
    ORDER BY l.lift_id ASC;
    

    【讨论】:

      【解决方案2】:

      你可以使用NOT EXISTS()

      SELECT t.* FROM lift t
      WHERE NOT EXISTS(SELECT 1 FROM lift s
                       WHERE s.lift_id = t.lift_id 
                         AND s.username = t.username
                         AND s.date > t.date)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多