繁体   English   中英

选择带有where子句和最近日期的不重复

[英]Select distinct with where clause and most recent date

我有一张表,仅需要查找不同的ARM字段值和STK,其中DATE是最新的,而STK大于1。也就是说,如果最新的负值我不再希望您显示。

下表如下:

Table MOV         

   Id       ARM   STK       DATE             
b3c842e3    F4    230   23-03-2019 00:00:00
b3c842e4    P8    832   24-03-2019 00:00:00
b32d4211    F4    -30   21-03-2019 00:00:00
6hhd421q    F4    100   26-03-2019 00:00:00
kih3221a    P8    -12   25-03-2019 00:00:00

我想要的结果是这样的:

ARM   STK
F4    100

我尝试使用SELECT DISTINCT但由于WHERE而无法完成我想要的操作。

您可以使用row_number()为每一行分配一个数字,该数字表示每个arm的最大date ,并对其进行过滤。

SELECT x.id,
       x.arm,
       x.stk,
       x.date
       FROM (SELECT t.id,
                    t.arm,
                    t.stk,
                    t.date,
                    row_number() OVER (PARTITION BY arm
                                       ORDER BY date DESC)
                    FROM elbal t
                    WHERE t.stk > 1) x
       WHERE x.rn = 1;

尝试这个:

select top 1 arm, stk
from mov
where stk > 1
group by arm,STK
order by max(date) desc

我不确定您是否想要stk > 1最新值:

select top (1) m.*
from mov m
where m.stk > 1
order by m.date desc;

或者,如果您希望ARM最新值的行stk > 1 如果这是您想要的,则:

select m.*
from (select m.*,
             row_number() over (partition by arm order by date desc) as seqnum
      from mov m
     ) m
where seqnum = 1 and m.stk > 1
order by m.date desc;

这两个都返回您指定的一行。

是一个db <> fiddle,它完全符合您在问题中指定的内容(嗯,它返回整行,而不仅仅是两列)。

您可以使用此SQL来获得所需的结果。

select t1.ARM,t1.STK from MOV t1
join (select Date=MAX(DATE) from MOV where STK > 1) T2 on t1.Date = T2.Date

但是请注意,如果多个记录具有相同的DATE,则会返回多行。

您可以group by arm以获取每个arm所有最大日期,然后加入表mov并拒绝条件stk > 1不适用的所有行。

select 
  m.arm, m.stk 
from mov m inner join (
  select arm, max(date) date
  from mov
  group by arm
) g on g.arm = m.arm and g.date = m.date
where m.stk > 1

参见演示
结果:

> arm | stk
> :-- | --:
> F4  | 100

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM