gpt4 book ai didi

SQL分组问题

转载 作者:可可西里 更新时间:2023-11-01 07:05:49 24 4
gpt4 key购买 nike

我有一个查询,它执行多个连接并在 WHERE 子句中有一些条件,我最终得到的结果基本上如下所示:

| userId |       date |  otherData |
|--------+------------+------------|
| 1 | 2008-01-01 | different |
| 1 | 2009-01-01 | info |
| 1 | 2010-01-01 | for |
| 2 | 2008-01-01 | each |
| 3 | 2008-01-01 | row |
| 3 | 2009-01-01 | here |

因此,本质上对于每个用户,都会有一个或多个过去的日期,以及 0 个或多个 future 的日期。

我需要以某种方式将数据集减少到每个用户一行,只选择具有最近通过日期的行。也就是说,无论添加任何神奇的 GROUP BYHAVING 子句,上面的结果都将如下所示:

| userId |       date |  otherData |
|--------+------------+------------|
| 1 | 2009-01-01 | info |
| 2 | 2008-01-01 | each |
| 3 | 2009-01-01 | here |

最佳答案

我认为您不想使用 GROUP BY/HAVING,因为您只对每个用户 1 行感兴趣,并且该行已经按原样存在于表中。这需要 WHERE 子句而不是 GROUP BY/HAVING。

我的建议是,在 WHERE 子句中,添加一个条件,即日期必须等于子查询的结果。该子查询应该:

  1. 选择最大(日期)
  2. 有一个 WHERE 子句限制日期小于现在
  3. 有一个 UserID 等于外部查询的用户 ID 的 WHERE 子句

为防止某个用户可以拥有两个具有相同日期且也是最大“通过”日期的条目,您还应该添加 DISTINCT。

希望对您有所帮助。

关于SQL分组问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/938115/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com