我有一个包含租户及其地址的表。
租户可以有多个地址,每个地址可以出现多次(关闭、打开、修改(。租户首先显示一个地址(第一个(,之后他可以对第一个地址进行多次更改(closed,open,modified(关闭、打开、修改或其他地址(。
如何提取第一个地址的截止日期。
这个问题有一个转折点。街道的名字和第一个地址不完全一样。它可以在他们的名字中包含St.,Ave。
表格如下:
id | 租户 | 代码街道 | 编号 | >日期|
---|---|---|---|---|
1 | 爱丽丝 | 第一次艾比5 | 2021年1月1日||
2 | Alice | 修改Abbey Ro.5 | 2021年1月2日 | |
3 | Alice | OpenElm St | 3 | 2021年1月2日 |
4 | 爱丽丝 | 关闭圣。Abbey | 5 | 2021年1月5日 |
5 | Bob | 第一次第五次 | 10 | <2021年2月1日>|
6 | 鲍勃 | 开放第五大道 | 222 | 2021年2月1日|
7 | 鲍勃 | 关闭第五大道222 | 2021年2月5日||
8 | 鲍勃 | 关闭第五大道 | 10 | 2021年2月6日[/tr>
您需要两条记录中的sometihng相等(第一条和第二条(例如,如果你确定"数字"每次都是一样的,并且id用户是唯一的,你可以使用它
SELECT * FROM tenant WHERE Number = 10 AND Id = 5 AND code = "close"
但这只是一个例子,你可以和你的租户一起使用它,因为你很容易遇到bug例如,如果租户有一个以上具有相同号码的地址
如果你知道另一个单词(st.、ave等(在街上的位置,你可以使用%
示例
7 |鲍勃|关闭|第五大道| 222 | 2021年2月5日
sql:
SELECT * FROM tenant WHERE Number = 10 AND Street LIKE 'Fifth%' AND code = "close"
8 | Bob | Close | Ave Fifth | 10 | 06.02.2021
sql:
SELECT * FROM tenant WHERE Number = 10 AND Street LIKE '%Fifth' AND code = "close"
否则你必须换桌子例如,通过添加"地址编号"字段指示地址是第一、第二、第三等等。。对于那个人
我会这样做:
with cte as(
select tenant, code, street, number, date, row_number() over (partition by tenant order by date desc) as rank
from tenants
order by date desc
)
select * from cte where rank = 1;