从表中获取最新的两个不同位置

Posted

技术标签:

【中文标题】从表中获取最新的两个不同位置【英文标题】:Get latest two distinct location from table 【发布时间】:2016-05-25 07:38:07 【问题描述】:

下面是我的桌子,

SELECT DISTINCT(availability_location) as location FROM table_name WHERE user_id = '8' ORDER BY availability_date DESC LIMIT 2

我得到以下结果

我想要以下结果:

2016-05-27 浦那

2016-05-20 伯班克

即唯一的availability_location 以及最新的两个条目。

【问题讨论】:

【参考方案1】:

您必须为此使用GROUP BY

SELECT availability_location as location,
       MAX(availability_date) AS max_date
FROM table_name 
WHERE user_id = '8' 
GROUP BY location
ORDER BY max_date DESC LIMIT 2

【讨论】:

我猜我还行。第一条记录是“2016-05-27”,位置为“Pune”,但在 DB 中“2016-05-27”的日期位置是“pune” 看看情况——“Pune”和“pune”。我期待“pune”,因为它的日期是“2016-05-27”,但得到“Pune” @AP。这是因为您使用的排序规则:Punepune 是同一件事。【参考方案2】:

您可以使用GROUP BY 并在最大日期之前订购:

 SELECT t.availability_location
 FROM table_name t 
 WHERE user_id = '8'
 GROUP BY t.availability_location 
 ORDER BY max(s.availability_date) DESC LIMIT 2

输出:

availability_location
---------------------
pune
Burbank

编辑:下一次,您应该提到您希望它区分大小写。您可以尝试这样做:

 SELECT t.availability_location 
 FROM table_name t 
 INNER JOIN(SELECT s.availability_location , max(s.availability_date) as max_d
            FROM table_name s
            WHERE s.user_id = '8'
            GROUP BY s.availability_location) t2
  ON(t2.availability_location = t.availability_location AND
     t2.max_d = t.availability_date)
 ORDER BY t.availability_date DESC LIMIT 2

【讨论】:

这个查询给出了 Pune 和 Burbank。我以“Pune”为位置获得第一条记录为“2016-05-27”但在数据库中“2016-05-27”的日期位置为“pune” @AP。现在试试,不确定是否可以将它们分开显示,因为它们可能在同一个排序规则中 我说的是第二个,应该区分大小写@ap。

以上是关于从表中获取最新的两个不同位置的主要内容,如果未能解决你的问题,请参考以下文章

如何从表中获取字段列表和不同值

如何从两个不同的、不相关的表中获取最新的行,并将它们合并到一个结果集中?

是否有任何其他选项可以从表中获取总计数和同一查询中列的不同计数?

由于外键为空值,无法从表中获取数据

用于从表中选择具有最新时间戳的行的 JOOQ 代码

Rails:为循环的每次迭代从表中获取数据