有人可以为我解释一下这个 SQL 吗?

Posted

技术标签:

【中文标题】有人可以为我解释一下这个 SQL 吗?【英文标题】:Can someone explain this SQL for me? 【发布时间】:2017-06-14 13:51:35 【问题描述】:

我在上一个问题中得到了这个 SQL 作为答案,但在解释查询时我没有得到任何回应。所以我在这里问。 我之前的问题:How can i remove the oldest entries in my SQL result?

select a.id,
       a.user,
       a.item_id,
       a.created
  from reports as a
 where a.created = (select max(created) 
                      from reports as b
                     where a.item_id = b.item_id)

【问题讨论】:

哪部分不明白? 请至少链接到另一个问题,以便我们了解一些上下文! 我希望它解释 - 部分解释,以了解完整的查询 @JohannesStadler 我编辑了我的问题并添加了指向我其他问题的链接。 【参考方案1】:

以下子查询返回最大创建结果(我认为它是日期列,因此将返回最后创建日期)

 select max(created) 
                  from reports as b
                 where a.item_id = b.item_id

根据报告表中的结果创建列匹配该值并返回结果。 以下行匹配两个表 item_id 列。

where a.item_id = b.item_id

【讨论】:

子查询返回每个不同 item_id 的最大创建结果,而不是全局最大值。【参考方案2】:

您有一个名为reports 的表,并且您正在提取一个包含iduseritem_idcreated 字段的表。对于每个不同的 item_id,此新表将仅包含包含 created 最大值的行。

这部分提取你想要的字段:

select a.id,
       a.user,
       a.item_id,
       a.created

来自名为报告 (a) 的表格:

  from reports as a

只提取满足条件的行:

 where a.created = (select max(created) 
                      from reports as b
                     where a.item_id = b.item_id)

【讨论】:

你能解释一下情况吗? '3', '1', '19333', '2017-06-13 19:26:56' '4', '1', '19333', '2017-06-13 19:29:24' 你有相同的 item_id,对吧?但是两个不同的时间戳,所以你选择最近的一个,max(created) 在上面@MiloBellano 的示例中,您将有两行具有相同的 item_id,因此您的查询将选择具有创建字段最大值的行(最近日期)

以上是关于有人可以为我解释一下这个 SQL 吗?的主要内容,如果未能解决你的问题,请参考以下文章

有人可以为我非常简单地解释 MVC 吗? [复制]

Python socket Recv 无法正常工作,有人可以解释一下吗

有人可以用 javascript 为我解释 =+ 运算符吗? [复制]

有人能解释一下这个功能吗

java中的数据源是啥?有人可以用简单的语言解释一下吗?

有人可以解释一下这个简单的python代码吗?