【问题标题】:MySQL Getting last 5 entries for each id in a SELECT - WHERE IN statementMySQL 在 SELECT - WHERE IN 语句中获取每个 id 的最后 5 个条目
【发布时间】:2015-02-14 12:00:54
【问题描述】:

我想在 SELECT - WHERE IN 语句中为每个 id 选择最后 5 个条目。

//How to get last 5 entries for each id
SELECT * FROM table1
WHERE id IN (111,222,333,.....)
ORDER BY date DESC
LIMIT 5

编辑:数据结构示例

id  date    name
111 7-Nov   Anna
111 8-Nov   Belle
111 9-Nov   Mary
111 10-Nov  John
111 11-Nov  Robert
111 12-Nov  Gary
111 13-Nov  Rick
222 8-Apr   Sarah
222 9-Apr   Lee
222 10-Apr  Margaret
222 11-Apr  Lisa
222 12-Apr  Will
222 13-Apr  Alex
222 14-Apr  Kelly
222 15-Apr  Lucas

期望的结果

id  date    name
111 13-Nov  Rick
111 12-Nov  Gary
111 11-Nov  Robert
111 10-Nov  John
111 9-Nov   Mary
222 15-Apr  Lucas
222 14-Apr  Kelly
222 13-Apr  Alex
222 12-Apr  Will
222 11-Apr  Lisa

我不确定这可以在 mysql 中完成。我尝试查看发布的一些答案,但找不到答案。

【问题讨论】:

  • @MarcoMura 我正在尝试获取每个 id 的最后 5 个条目(在 where - in 语句中)现在所有条目。
  • 考虑提供适当的 DDL 和所需的结果
  • 你不清楚。我们需要数据结构
  • 考虑使用联合...

标签: php mysql select where-in sql-limit


【解决方案1】:

它只是伪代码,但我认为它有效。试试这个

选择

身份证,

SUBSTRING_INDEX(GROUP_CONCAT(some_column_1 ORDER BY date DESC),',',5)

SUBSTRING_INDEX(GROUP_CONCAT(some_column_2 ORDER BY date DESC),',',5)

....

FROM table WHERE id IN (111,222,333,.....) GROUP BY id;

看起来不像你想要的。我只是展示了如何使用 GROUP_CONCAT 和 SUBSTRING_INDEX 函数,你应用它,你可以找到答案。

【讨论】:

    【解决方案2】:

    这没有多大意义,但如果你的 mysql 版本支持它,你可以用子查询来做:

    SELECT * FROM `table1`
    WHERE `id` IN (SELECT `id` FROM `table1` ORDER BY `date` DESC LIMIT 5)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-07
      • 1970-01-01
      • 2016-12-29
      • 2022-10-06
      • 2018-04-16
      • 2011-01-12
      • 2011-02-07
      • 1970-01-01
      相关资源
      最近更新 更多