我有一张表,仅需要查找不同的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
,我无法做我想做的事。
答案 0 :(得分:1)
您可以使用row_number()
为每一行分配一个数字,该数字是所有date
中最大的arm
的1,然后对其进行过滤。
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;
答案 1 :(得分:1)
尝试一下:
select top 1 arm, stk
from mov
where stk > 1
group by arm,STK
order by max(date) desc
答案 2 :(得分:0)
我不确定您是否要使用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;
这两个都返回您指定的一行。
in this CodePen是一个db <>小提琴,表明它确实满足您在问题中指定的内容(嗯,它返回整行,而不仅仅是两列)。
答案 3 :(得分:0)
您可以使用此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,则会返回多行。
答案 4 :(得分:0)
您可以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
请参见demo。
结果:
> arm | stk
> :-- | --:
> F4 | 100