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

Posted

技术标签:

【中文标题】如何从同一个表中选择特定单元格的行?【英文标题】:How can i select rows for specific cells from same table? 【发布时间】:2021-01-12 08:53:26 【问题描述】:

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

一个租户可以有多个地址,并且每个地址可以出现多次(关闭、打开、修改)。 租户首先出现一个地址(first),之后他可以对第一个地址进行多次更改(关闭、打开、修改),或者他可以有其他地址(关闭、打开、修改)。

如何提取关闭第一个地址的日期。

问题来了。街道的名称并不完全像首地址。它的名称中可以包含 St.、Ave.。

表格如下所示:

id Tenant code Street Number Date
1 Alice First Abbey 5 01.01.2021
2 Alice Modify Abbey Ro. 5 02.01.2021
3 Alice Open Elm St 3 02.01.2021
4 Alice Close St. Abbey 5 05.01.2021
5 Bob First Fifth 10 01.02.2021
6 Bob Open Fifth Ave 222 01.02.2021
7 Bob Close Fifth Ave 222 05.02.2021
8 Bob Close Ave Fifth 10 06.02.2021

预期的结果应该是这样的:

id Tenant CloseID Street Number Date
1 Alice 4 Abbey 5 05.01.2021
2 Bob 8 Fifth 10 06.02.2021

我觉得答案就在那里,但我抓不到它 :) 提前感谢您的支持。

【问题讨论】:

ID列真的是表中的列吗? Bob 是如何获得 ID 2 的? 街道从5号变成8号?你需要在两个记录中保持平等 是具有自己 id 的结果表。实际上只是一个枚举(生成的数字或标准数字)。不一定要在那里:) 我不明白。为什么第 4 行不关闭第 3 行的地址? 完全是其他地址。我想举例说明一个租户可以拥有多个房屋并对其进行多项操作。在这种情况下,Alice 有 2 个家:Elm Street 3 和 Abbey Aley 5。首先是 Abbey 5,然后修改 Abey 5。之后打开 Elm 3 并关闭 Abbey 5。需要知道她/他何时关闭第一个 Home,在此cas 修道院 5 【参考方案1】:

你需要在两个记录中都相等(第一个和关闭) 例如,如果您确定“数字”每次都相同,并且 id 用户是唯一的,您可以使用它

SELECT * FROM tenant WHERE Number = 10 AND Id = 5 AND code = "close"

但这只是一个示例,您可以将它与您的租户一起使用,因为您很容易遇到错误 例如,如果租户有多个相同号码的地址

如果您知道另一个词(st.、ave 等)在 Street 中的位置,您可以使用 %

例子

7 |鲍勃 |关闭 |第五大道 | 222 | 05.02.2021

sql:

SELECT * FROM tenant WHERE Number = 10 AND Street LIKE 'Fifth%' AND code = "close"

8 |鲍勃 |关闭 |第五大道 | 10 | 06.02.2021

sql:

SELECT * FROM tenant WHERE Number = 10 AND Street LIKE '%Fifth' AND code = "close"

否则你必须换桌子 例如,通过添加地址编号字段 指示地址是否是该人的第一、第二、第三等等。

【讨论】:

感谢您的快速回复。我必须为每个租户运行此选择,将他的第一个地址(街道和号码)与他的相同地址(街道和号码)进行比较,但使用 CLOSE 代码。 不客气 - 如果我能帮助您,请将此答案标记为正确并关闭此主题。 该表有大约 10000 条记录,有很多租户 :) 如果地址不一样我认为不可能,你应该添加一个连续的“地址id”字段,并确保用户“id”也是如此,以便创建一个while循环,每个当你给两个 id 添加 +1 时,考虑所有用户并将第一个地址的 id 与关闭的地址进行比较 租户可以有多个地址,但一个地址保持不变(名称和号码)除了后缀名称(即“ave”、“st”从街道名称开始或结束)。变化只是代码(打开、关闭等)和日期。从一个租户的多个地址中,只有一个地址包含“First”代码。【参考方案2】:

我会这样做:

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;

【讨论】:

感谢您的快速回复。街道名称并不完全相同。我必须使用类似“'%StreetName%'”的东西 对于段落我使用两个返回。 这不是我想要的。结果基于日期,这并不总是正确的。但是正在提取一些东西,这比我迄今为止获得的要好得多。我必须将每个租户的第一个地址(街道和号码)与他的相同地址(街道和号码)进行比较,但使用 CLOSE 代码。谢谢。 我同意我确实误解了你的问题:)

以上是关于如何从同一个表中选择特定单元格的行?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用JS / jQuery在HTML表中选择一个特定的单元格?

如何从一个带有动态单元格的表格切换到 3 个或更多不同的视图

在EXCEL中 如何用VBA查找某特定单元格并返回该单元格的行和列值?

根据单元格原始列的行数将特定单元格的内容复制到空列

vba如何读取excel中某单元格的行数或列数

尝试使用 VBA 更改工作表中特定单元格的值失败