首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >只有在有足够的记录时才返回结果

只有在有足够的记录时才返回结果
EN

Stack Overflow用户
提问于 2018-11-08 15:52:40
回答 3查看 51关注 0票数 0

谢谢你的答复,这是一个由两部分组成的问题。

数据库将被称为:“生产”表将被称为:"FruitHistory“

样本数据:

是否有一种方法来查询这些数据,以便它只返回至少有3天数据的结果(举个例子)。

例句:查询返回托尼、大卫和亚伦的记录,但不返回伯尔尼的记录

Part2:

基于第1部分的规则,但现在只返回3天的数据。

例句:查询返回托尼和亚伦的11/3-11/5以及大卫的所有数据,但仍然没有伯尔尼的数据。

谢谢!

EN

回答 3

Stack Overflow用户

发布于 2018-11-08 16:04:11

假设您使用的DBMS是相对现代的,那么它将具有分析/加窗功能。在这种情况下,下面应该做您所描述的事情的类型。

代码语言:javascript
运行
复制
SELECT
  *
FROM
(
  SELECT
    *,
    COUNT(*)     OVER (PARTITION BY customer_name)                           AS cust_record_count,
    ROW_NUMBER() OVER (PARTITION BY customer_name ORDER BY day_column DESC)  AS cust_record_id
  FROM
    yourTable
)
  summarised
WHERE
      cust_record_count >= 3
  AND cust_record_id    <= 3
票数 2
EN

Stack Overflow用户

发布于 2018-11-08 16:29:15

在Oracle12.1或更高版本中,MATCH_RECOGNIZE可以快速完成此类需求。我在WITH子句中创建示例数据(不是SQL语句的一部分--使用实际的表名和列名)。我更改了列名--列名中不应该有空格(您的第一列是这样的),而且它们不应该是Oracle关键字(比如日期或日期)。我没有以任何方式对输出进行排序;如果这是最后的报告,而不是用于进一步的处理,则可以在末尾添加order子句。

代码语言:javascript
运行
复制
with
  sample_data(customer, dt, fruit) as (
    select 'Tony' , date '2018-11-01', 'Orange'     from dual union all
    select 'Tony' , date '2018-11-02', 'Apple'      from dual union all
    select 'Tony' , date '2018-11-03', 'Pear'       from dual union all
    select 'Tony' , date '2018-11-04', 'Plum'       from dual union all
    select 'Tony' , date '2018-11-05', 'Grape'      from dual union all
    select 'David', date '2018-11-03', 'Orange'     from dual union all
    select 'David', date '2018-11-04', 'Watermelon' from dual union all
    select 'David', date '2018-11-05', 'Cantelope'  from dual union all
    select 'Bern' , date '2018-11-05', 'Kiwi'       from dual union all
    select 'Aaron', date '2018-11-01', 'Orange'     from dual union all
    select 'Aaron', date '2018-11-02', 'Apple'      from dual union all
    select 'Aaron', date '2018-11-03', 'Watermelon' from dual union all
    select 'Aaron', date '2018-11-04', 'Kiwi'       from dual union all
    select 'Aaron', date '2018-11-05', 'Pear'       from dual
  )
select *
from   sample_data
match_recognize (
    partition by customer
    order by     dt desc
    all rows per match
    pattern      ( ^ a{3} )
    define       a as null is null
)
;

输出

代码语言:javascript
运行
复制
CUSTOMER  DT          FRUIT
--------  ----------  -------------
Aaron     2018-11-05  Pear
Aaron     2018-11-04  Kiwi
Aaron     2018-11-03  Watermelon
David     2018-11-05  Cantelope
David     2018-11-04  Watermelon
David     2018-11-03  Orange
Tony      2018-11-05  Grape
Tony      2018-11-04  Plum
Tony      2018-11-03  Pear
票数 1
EN

Stack Overflow用户

发布于 2018-11-08 15:58:00

第一部分:

代码语言:javascript
运行
复制
SELECT Name, Count(*)
FROM table
GROUP BY Name
HAVING Count(*)>2

第二部分:

代码语言:javascript
运行
复制
SELECT *
FROM table
WHERE Name IN (SELECT Name
FROM table
GROUP BY Name
HAVING Count(*)>2)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53211400

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档