如何从同一个表中为特定单元格选择行



我有一个包含租户及其地址的表。

租户可以有多个地址,每个地址可以出现多次(关闭、打开、修改(。租户首先显示一个地址(第一个(,之后他可以对第一个地址进行多次更改(closed,open,modified(关闭、打开、修改或其他地址(。

如何提取第一个地址的截止日期。

这个问题有一个转折点。街道的名字和第一个地址不完全一样。它可以在他们的名字中包含St.,Ave。

表格如下:

代码>日期第一次艾比2021年1月1日修改Abbey Ro.Open关闭第一次<2021年2月1日>开放2021年2月1日关闭第五大道2021年2月5日关闭2021年2月6日[/tr>
id 租户街道编号
1 爱丽丝5
2 Alice52021年1月2日
3 AliceElm St32021年1月2日
4 爱丽丝圣。Abbey52021年1月5日
5 Bob第五次10
6 鲍勃第五大道222
7 鲍勃222
8 鲍勃第五大道10

您需要两条记录中的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;

最新更新