如何在 Oracle SQL 中仅选择最近 30 天内第一次在表中显示的这些 ID?
Posted
技术标签:
【中文标题】如何在 Oracle SQL 中仅选择最近 30 天内第一次在表中显示的这些 ID?【英文标题】:How to select only these IDs which shows in table for the first time during last 30 days in Oracle SQL? 【发布时间】:2021-11-22 02:58:19 【问题描述】:我在 Oracle SQL 中有一个表格,显示了客户的 ID 和他们登录应用程序的日期:
ID | LOGGED
----------------
11 | 2021-09-10 12:55:13.278
11 | 2021-08-10 13:58:13.211
11 | 2021-02-11 12:22:13.364
22 | 2021-09-15 08:34:13.211
33 | 2021-04-02 14:21:13.272
如何仅选择在过去 30 天内首次记录的这些 ID? 因此,我需要以下内容:
ID
---
22
因为在过去 30 天内第一次记录的只有 ID 22 -> 2021-09-15 08:34:13.211 如何在 Oracle SQL 中做到这一点?
【问题讨论】:
【参考方案1】:使用这个
Select id from table where trunc(logged)
>=
Trunc(sysdate-30) group by id having count(*) =1
或者更好的条件是使用 min, max
Select id from table where trunc(logged)
>=
Trunc(sysdate-30) group by id having min(logged)
=max(logged)
【讨论】:
你确定没问题吗?当我们取 min(logged) = max(logged) 时,我们将拥有在过去 30 天内仅记录一次的 ID,在过去 30 天内 ID 记录了几次的情况下,这样将不会有 min = max 是的有效条目,除非某些超人可能同时登录多次以上是关于如何在 Oracle SQL 中仅选择最近 30 天内第一次在表中显示的这些 ID?的主要内容,如果未能解决你的问题,请参考以下文章
如何在Oracle中仅将列用作1行到1行返回pl / sql函数中的参数