sql—存储过程(来自同一表的内部联接)

baubqpgj  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(700)

我有一张这样的table

value | date | station with various values  for example :

valor_observado  |    data_observacao    | estacao 
14                   2020-01-18              X
15                   2020-01-19              X
16                   2020-01-20              X
1                    2020-01-18              Y
2                    2020-01-19              Y
3                    2020-01-20              Y

我想做一个以日期作为输入的存储过程,它给我最大的值,日期和站。在本例中,输入“2020-01-18”的结果将是

data_observacao | valor_observado | estacao
  2020-01-18           14            X

我创建了这样一个存储过程,但它不起作用(没有显示任何内容):

CREATE PROC PRECIPITACAO_MAXIMA_DATA @data date  AS
select data_observacao=@data , maximo_precipitacao,estacao
from WEATHER_STATION.Precipitacao 
inner join
(select data_observacao= @data ,max(valor_observado) as maximo_precipitacao 
from WEATHER_STATION.Precipitacao) a
on a.data_observacao = WEATHER_STATION.Precipitacao.data_observacao AND a.maximo_precipitacao = valor_observado 
GO

结果是:

data_observacao | valor_observado | estacao
hpxqektj

hpxqektj1#

考虑使用行限制查询:

create proc precipitacao_maxima_data 
    @data date  
as
    select top (1) t.*
    from weather_station.precipitacao t
    where data_observacao = @data
    order by valor_observacao desc;

这只是选择所有 data_observacao 匹配给定的 @data 参数,按降序排序 valor_observacao ,并仅保留第一行。

oprakyz7

oprakyz72#

我假设您使用的是基于语法的sqlserver。
您可以使用以下工具做您想做的事情:

select top (1) p.*
from WEATHER_STATION.Precipitacao p
where data_observacao = @data
order by valor_observado desc;

在大多数其他数据库中,可以使用 limit 或者 fetch first 1 row only .

相关问题