需要一个查询来从我的 sql 中的表中获取不同的数据

Posted

技术标签:

【中文标题】需要一个查询来从我的 sql 中的表中获取不同的数据【英文标题】:Need a Query to fetch distinct data from a table in my sql 【发布时间】:2020-04-21 15:32:31 【问题描述】:

我有一个包含以下列的历史表:

ID   Previous  Current  User     createdOn
1    RED       BLUE     System   2020-04-14 09:24:49.765000
2    GREEN     YELLOW   ADMIN    2020-04-12 03:56:34.765000
3    GREEN     BLUE     System   2020-04-14 11:37:21.765000
4    ORANGE    RED      System   2020-04-15 11:24:49.765000

我需要一个查询来从表中获取数据,即使用户一天有多个条目,每个用户也应该在一天内只返回一行

所需的结果集应如下所示:

User       CreatedOn
ADMIN      2020-04-12 03:56:34.765000
System     2020-04-14 09:24:49.765000
System     2020-04-15 11:24:49.765000

【问题讨论】:

您能分享一下您目前尝试过的问题吗? 【参考方案1】:

您可以按用户和日期分组,并为每个用户获取最小的createdOn

select User, min(createdOn) createdOn
from History
group by User, date(createdOn)

请参阅demo。 结果:

| User   | createdOn                  |
| ------ | -------------------------- |
| ADMIN  | 2020-04-12 03:56:34.765000 |
| System | 2020-04-14 09:24:49.765000 |
| System | 2020-04-15 11:24:49.765000 |

【讨论】:

【参考方案2】:

您可以返回最近的记录,例如:

select h.*
from history h
where h.createdOn = (select max(h2.createdOn)
                     from history h2
                     where h2.user = h.user and
                           h2.createdOn >= date(h.createdOn) and
                           h2.createdOn < date(h.createdOn) + interval 1 day
                    );

【讨论】:

以上是关于需要一个查询来从我的 sql 中的表中获取不同的数据的主要内容,如果未能解决你的问题,请参考以下文章

创建 pl/sql 过程以从不同的表中获取不同的列

如何做一个函数来从 pl/sql 中的表中返回行类型?

如何从 SQL Server 中的表中获取不匹配的数据

查找引用某个表中特定列的所有存储过程

SQL查询优化Oracle

SQL查询从多个表返回数据