如何在 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函数中的参数

如何从 oracle sql 中只选择 1 行?

在 Oracle 中仅选择没有 Null 值的列

HIVE SQL:从庞大的数据库中仅选择一个值的最快方法是啥

在oracle中仅选择且仅选择特定记录[关闭]

使用 PL SQL 将数据插入到 oracle 表中仅包含一年中的“星期六”