【问题标题】:Fetch latest date-time in mysql for every user id在mysql中为每个用户ID获取最新的日期时间
【发布时间】:2013-04-08 13:32:54
【问题描述】:
   user_id   payment_end_time 
    1674    2008-01-10 07:51:21
    1675    2008-01-05 17:48:51
    1675    2009-01-20 16:56:04
    1675    2010-01-27 13:16:34
    1676    2008-01-05 20:21:35
    1676    2009-01-07 18:46:41
    1676    2009-12-08 13:59:08
    1677    2008-01-05 20:30:16
    1677    2009-01-03 19:11:03
    1677    2009-10-07 06:24:58
    1678    2008-01-26 06:23:46
    1678    2009-01-18 12:19:58
    1679    2008-01-06 12:11:29
    1679    2009-01-23 08:44:51
    1680    2008-03-28 18:58:20
    1680    2009-12-31 16:39:46
    1681    2008-01-07 07:24:03
    1682    2008-01-07 11:37:43
    1682    2009-01-16 20:26:16
    1682    2010-02-02 09:38:34

1.user_id 不是唯一的,因为一个用户可以支付多次。给定用户的每次付款都会插入一个新行。

2.我必须在数据库 user_id(不是主键)和 payment_end_time 字段。

3.我希望每个 user_id 的输出都带有 payment_end_time(每个用户的最新日期时间,即按 DESC 订购)。

4.我希望每个 user_id 只使用一次,即 user_id (1675 2010-01-27 13:16:34) (1676 2009-12-08 13:59:08) 对于 1677 等类似这样..

我试过了

SELECT user_id, MAX(payment_end_time) 来自 tbl_payment_info
按用户 ID 分组 ORDER BY payment_end_time DESC 限制 1 个

我已经尝试过了,但它只显示单行。我希望每个 USER_id 只显示一次,并带有最新的日期时间

【问题讨论】:

  • 你应该向我们展示你的努力——“你尝试了什么?”。
  • 提示:阅读 SQL GROUP BYMAX

标签: php mysql


【解决方案1】:

给你:

SELECT  user_id, MAX(payment_end_time) latest_payment_end_time
FROM    mytable
GROUP BY user_id
ORDER BY latest_payment_end_time DESC

【讨论】:

  • 先生,它显示 1675 三次。我只想要 1675 一次最新日期时间,与 1676 类似,依此类推
  • user_id 是什么数据类型? INT 或不同的东西(可能是 VARCHAR(10))? GROUP BY 实际上应该确保每个唯一的 user_id 条目只出现一次。
【解决方案2】:
SELECT * FROM (SELECT * FROM `payment` ORDER BY payment_end_time DESC) AS `p` GROUP BY user_id

【讨论】:

  • 这个查询完全符合您的需要。我刚刚导入了您的数据,运行了查询,并获得了具有最新日期的唯一 user_id。你能解释一下,究竟是什么不工作?
猜你喜欢
  • 1970-01-01
  • 2015-11-07
  • 1970-01-01
  • 2020-02-12
  • 1970-01-01
  • 2013-11-22
  • 2015-02-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多