我有一个包含多个租户的表,有些租户有另一个到期日期,表中的其余部分对于每个租户都是相同的。我想选择只有最新到期日的租户。
这是我的代码:
SELECT DISTINCT
property.scode AS "M nr",
tenant.scode AS "Contract nr",
unit.scode AS "Unit",
commamendments.DTSTART AS "Starting date",
sqft.DTDATE AS "Expiry date",
sqft.DSQFT0 AS "Area"
FROM
property
LEFT JOIN unit ON unit.hproperty = property.hmy
LEFT JOIN unitxref ON unitxref.hunit = unit.hmy
LEFT JOIN commamendments ON commamendments.hmy = unitxref.hamendment
LEFT JOIN tenant ON tenant.hmyperson = commamendments.htenant
JOIN attributes ON attributes.HPROP = property.hmy
JOIN sqft ON sqft.hpointer = unit.hmy
WHERE property.scode = '481'
AND sqft.DSQFT0 != '0'
AND ('9/30/2017 12:00:00 AM' BETWEEN commamendments.DTSTART AND commamendments.DTEND)
ORDER BY commamendments.DTEND`
作为输出,我想要一个带
的表Mnr Contract nr Unit Starting date Expiry date Area
481 1 1 9-10-2017 12-31-2018 400
481 2 2 8-10-2017 12-31-2019 500
.....
我现在收到的是:
Mnr Contract nr Unit Starting date Expiry date Area
481 1 1 9-10-2017 12-31-2018 400
481 1 1 9-10-2017 09-20-2018 400
481 2 2 8-10-2017 12-31-2019 500
481 2 2 8-10-2017 1-31-2018 500
.....
答案 0 :(得分:1)
由于您没有指定您正在使用的RDBMS和表架构,因此您可以执行此操作:
SELECT t1.tenantId, t1.ExpiryDate
FROM tenants AS t1
INNER JOIN
(
SELECT tenantId, MAX(ExpiryDate) AS LatestExpiryDate
FROM tablename
GROUP BY tenantId
) AS t1 ON t1.tenantId = t2.tenantId, t1.ExpiryDate = t2.LatestExpiryDate;
内部联接将为每个租户ID提供最新日期,然后您可以加入原始查询以仅获取具有最新日期的那些。
(你没有指定表模式,所以我不得不猜测列的名称,但我希望你有这个想法。)
答案 1 :(得分:0)
使用Row_Number()查找租户的最新记录
Select * from (
Select *,Row_number() over(Partition by Tenants order by expirationdate desc) as rn from tablea
) x
Where rn = 1