我有一个查询,它会产生如下结果.我想要做的是过滤结果,以便只包括每天有超过1个交易的情况.在下面,它应该导致第3、4、6和7行.

我怎么才能进行过滤呢?

Row DATE TRANS DESCR AMOUNT
1 12/11/2002 BUY Positive 100
2 12/18/2002 BUY Positive 100
3 12/20/2002 BUY Positive 100
4 12/20/2002 SELL Negative -100
5 12/23/2002 BUY Positive 100
6 12/24/2002 BUY Positive 100
7 12/24/2002 SELL Negative -100
SELECT 
    to_char(CA.EFFECTIVE_DATE, 'mm/dd/yyyy') as DATE,
    trim(CA.TRANS) as TRANS,
    CA.DESCR,   
    sum(CA.AMOUNT) 
FROM 
    CASHDBO.TRANSACTIONS CA
    INNER JOIN SECURITYDBO.SECURITY SM  ON (SM.SECURITY_ID = CA.SECURITY_ID) 
WHERE
    CA.TRANS_TYPE in ( 'REINVEST','BUY','RGHTEXER','SELL')
GROUP BY
    to_char(CA.EFFECTIVE_DATE, 'mm/dd/yyyy'),
    trim(CA.TRANS),
    CA.DESCR

我试着添加了

HAVING 
    COUNT(trim(CA.TRANS)) > 1

但这是根据底层/未分组的记录进行过滤的.

推荐答案

您可以使用您的查询并使用它:

WITH ( ... ) AS your_query
SELECT *
FROM your_query
WHERE date IN 
(
  SELECT date
  FROM your_query
  GROUP BY date
  HAVING COUNT(*) > 1
);

或者在您的查询中添加一个窗口函数并使用:

SELECT date, trans, descr, total
FROM
(
  SELECT 
    TO_CHAR(ca.effective_date, 'mm/dd/yyyy') AS date,
    TRIM(ca.trans) AS trans,
    ca.descr,   
    SUM(ca.amount) AS total,
    COUNT(*) OVER (PARTITION BY TO_CHAR(ca.effective_date, 'mm/dd/yyyy')) AS cnt
  FROM ...
) with_cnt
WHERE cnt > 1;

Sql相关问答推荐

在SQL Server中使用LEFT连接包含特定记录

如何查询一个名称是根据PL/pgSQL函数结果构建的表?

在数据分区内执行确定

JSON列之间的Postgr聚合

转换表中的数据

在SQL中使用类别值将行转置为列

部分匹配表中元素的MariaDB查询查找结果

我希望以正确的升序获取SQL结果.怎样才能得到它们?

Ffltter&;Dart SQL Lite包:是否可以在一个查询中执行多条更新语句(每次执行不同的WHERE参数)

NULL-生成的列中连接的字符串的输入

WooCommerce产品的SQL查询:获取sku和产品标签

postgres中的条件索引和触发器

SQL 查找 varchar 类型列及其值中多次出现的子字符串

SQL Server:时态表并在运行时添加计算列

获取记录的上一个值,并将其与当前值一起显示

如何在插入时将字符串'03-January-2023'转换为日期时间

插入行时的行安全策略问题

在 postgresql 中保存带有时间戳的几何类型数据

BigQuery - 将 TIMESTAMP 转换为 HH:MM:SS,然后识别 TIME_DIFF

Postgres 窗口函数未按预期工作