用于识别不匹配的SQL查询

时间:2018-06-07 15:47:38

标签: sql oracle

我需要在同一个表格中为多个帐户的三行比较同一列,我该怎么做?

示例:让我们来一张桌子"帐户"

Accountno.     Name.    Date
01.               A.            01/03/2018
01.               B.            01/03/2018
01.               C             01/03/2018

02.               A.            01/05/2018
02.               B.            01/05/2018
02.               C             01/03/2018 

我的查询应该将输出作为帐户02提供,因为它在行A,B,C的日期中不匹配,并且应该忽略帐户01。

基本上,如果不匹配,则应打印帐户,否则请忽略并继续。

3 个答案:

答案 0 :(得分:0)

由于OP没有指定,下面的DBMS只是一个使用子查询和聚合的简单示例。

要查找不匹配日期,只需按帐号获取最大值和最小值。因此,您可以轻松切断没有日期不匹配的帐户。

(在T-SQL中运行)

create table dbo.[Account]
(
    [Accountno] int not null,
    [Name] varchar(100) not null,
    [Date] date not null
)

GO

insert into dbo.[Account]
([Accountno], [Name], [Date])
values
 (01, 'A.',  '01/03/2018')
,(01, 'B.',  '01/03/2018')
,(01, 'C' ,  '01/03/2018')
,(02, 'A.',  '01/05/2018')
,(02, 'B.',  '01/05/2018')
,(02, 'C',   '01/03/2018')

GO

select x.Accountno
from
(
    select ac.Accountno, MAX(ac.Date) as lastDate, MIN(ac.Date) as firstDate
    from dbo.Account ac
    group by ac.Accountno
) as x
where x.firstDate != x.lastDate

修改

Oracle 撰写相同的查询。 小提琴示例http://sqlfiddle.com/#!4/e96181/8

select x.Accountno
from
(
    select ac.Accountno, MAX(ac.MyDate) as lastDate, MIN(ac.MyDate) as firstDate
    from Account ac
    group by ac.Accountno
) x
where x.firstDate != x.lastDate

(在Oracle 11g上运行)

答案 1 :(得分:0)

我会这样做:

funkcja <- function(i,k=5)
{
  beta <- c(k,k,0,k,k,rep(0,35))
  X <- matrix(rnorm(100*40),100,40)
  y <- X %*% beta + rnorm(100)

  lasso.lars <- lars(X,y,intercept=FALSE,use.Gram=FALSE)
  test <- covTest(lasso.lars,X,y,sigma.est=1)
  test
}

这是标准SQL,应该可以在任何数据库中使用。

答案 2 :(得分:0)

我只会选择exists

select t.*
from table t
where exists (select 1 
              from table t1 
              where t1.accountno = t.accountno and 
                    t1.Date <> t.Date
             );