【问题标题】:selects the last item by date按日期选择最后一项
【发布时间】:2020-12-28 18:13:51
【问题描述】:

我有 2 种类型的物品,1000118500 和 1000438300,​​我想知道如何在最新日期之前只携带最后一件物品。

所以我只有 2 行,最新的行

id item       created
1  1000438300 2018-10-26 00:43:30
2  1000438300 2018-10-16 00:44:02
3  1000118500 2018-10-13 00:41:27
4  1000438300 2018-09-26 00:47:28
5  1000118500 2018-08-09 00:40:09
6  1000438300 2018-07-12 12:05:37
7  1000118500 2018-06-28 20:06:24
8  1000118500 2018-06-28 20:06:07

有人可以帮忙吗? 我正在使用 MariaDB

【问题讨论】:

  • 我上传了一张图片没有上传,我发了几行
  • 太好了,这里的大多数人想要线条,而不是图像!
  • 听听@peter,能力越大,责任越大:D

标签: sql datetime mariadb greatest-n-per-group


【解决方案1】:

你试过MAX函数吗

SELECT item, MAX(created)
    FROM table
GROUP BY item

或查看此帖子:How to select id with max date group by category in PostgreSQL?

【讨论】:

    【解决方案2】:

    您可以使用子查询进行过滤以获取每个 item 的最新行:

    select t.*
    from mytable t
    where created = (select max(t1.created) from mytable t1 where t1.item = t.item)
    

    此查询将利用(item, created_at) 上的索引。

    【讨论】:

    • 是的,但是您使用了不必要的子查询,不是吗?
    • @coytech:子查询检索每个项目的最新日期,因此这是必要的。
    【解决方案3】:
    SELECT * FROM [TABLE_NAME] ORDER BY created DESC LIMIT 1
    

    【讨论】:

    • 我认为他想要按项目而不是所有表格的 1 个结果
    • 不正确。 OP 想要每个项目的最后一个。特别提到需要返回2行
    【解决方案4】:

    假设created是一个DateTime列,选择你想要的并按日期降序排列,然后将结果限制为1行,即日期最新的行

    select item 
    from tablename
    where id = 1000438300
    order by created desc
    limit 1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-15
      • 2013-07-24
      • 2014-04-10
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多