我知道这可能是一个愚蠢的问题,但是我找不到合适的答案。
基本上,我有一个数据库,用于存储公寓的名称,预定和离开的日期以及居住者的姓名。
问题是同一间公寓有多个时间,且日期和名称不同(因为已被多次预订)。
我要做的是为每个公寓收集公寓的名称,日期以及住过的最后一个人的名字。
数据库如下:
apartment-name first-name date_from date_to
apartment 1 Aaa 2018-07-10 12:00 2018-07-15 12:00
apartment 1 Bbb 2018-08-16 12:00 2018-08-20 12:00
apartment 2 Ccc 2018-08-10 12:00 2018-08-16 12:00
apartment 2 Ddd 2019-08-10 12:00 2019-08-16 12:00
...
我想要这样的查询结果:
apartment-name first-name date_from date_to
apartment 1 Bbb 2018-08-16 12:00 2018-08-20 12:00
apartment 2 Ddd 2019-08-10 12:00 2019-08-16 12:00
因为这些是每个公寓中最新居住的人
我对SQL的了解有限,因此可能会有明显的答案...
谢谢!
答案 0 :(得分:0)
如果您可以假设date_from
对于给定的apartment-name
是唯一的,则可以为每个date_from
找到最新的apartment-name
,如下所示:
select apartment-name, max(date_from) as date_from from tablename group by apartment-name
要获取您要查找的其他字段,可以将其重新连接到原始表以过滤记录以仅显示每个公寓的最新居民:
select tablename.*
from tablename inner join
(select apartment-name, max(date_from) as date_from from tablename group by apartment-name) q
on tablename.apartment-name = q.apartment-name and tablename.date_from = q.date_from
理想情况下,您的表将具有一些唯一数字ID字段作为标识唯一记录的主键,但是如果给定的公寓名称/ date_from组合是唯一的,则应该起作用。