SQL数大于select结果

SQL数大于select结果,sql,sql-server,tsql,Sql,Sql Server,Tsql,我正在努力想办法用T-SQL实现这一点 我有一张表,每5秒钟填充一次,表中有英镑、欧元和美元三种货币的价格 我在insert之后创建了一个触发器,它选择为给定货币输入的最后5条记录: SELECT TOP 5 Price from dbo.prices where coin='GBP' ORDER BY Date Desc 我想确定上一次插入的货币价格是否大于上面选择的5,我该怎么做 谢谢尝试以下查询: DECLARE @AmountLastFiveEntry DECIMAL= (SELECT

我正在努力想办法用T-SQL实现这一点

我有一张表,每5秒钟填充一次,表中有英镑、欧元和美元三种货币的价格

我在insert之后创建了一个触发器,它选择为给定货币输入的最后5条记录:

SELECT TOP 5 Price from dbo.prices where coin='GBP' ORDER BY Date Desc
我想确定上一次插入的货币价格是否大于上面选择的5,我该怎么做

谢谢

尝试以下查询:

DECLARE @AmountLastFiveEntry DECIMAL= (SELECT TOP 5 SUM(Price) FROM dbo.prices WHERE 
    ID NOT IN (SELECT TOP 1 ID 
    FROM dbo.prices where coin='GBP' ORDER BY Date Desc) where coin='GBP' ORDER BY Date Desc)
     IF  @AmountLastFiveEntry<(SELECT TOP 1 Price 
    FROM dbo.prices where coin='GBP' ORDER BY Date Desc)
    BEGIN
    SELECT @AmountLastFiveEntry --To do task
    END

触发部分令人困惑

这将报告最新价格是否高于或等于前5个价格中的最大价格

declare @currency table (iden int IDENTITY(1,1) primary key, exchange smallint,  coin tinyint);  
insert into @currency (coin, exchange) values 
       (1, 1)
     , (1, 2)
     , (1, 3)
     , (1, 4)
     , (1, 5)
     , (1, 6)
     , (2, 1)
     , (2, 2)
     , (2, 3)
     , (2, 4)
     , (2, 5)
     , (2, 3);

select cccc.coin, cccc.exchange 
     , case when cccc.rn = cccc.rne then 'yes'
            else 'no'
       end  as 'high'
from ( select ccc.iden, ccc.coin, ccc.exchange, ccc.rn 
            , ROW_NUMBER() over (partition by ccc.coin order by ccc.exchange desc, ccc.rn) rne 
       from ( select cc.iden, cc.coin, cc.exchange, cc.rn  
              from ( select c.iden, c.coin, c.exchange 
                          , ROW_NUMBER() over (partition by coin order by iden desc) as rn
                     from @currency c
                   ) cc 
              where cc.rn <= 6 
            ) ccc
     ) cccc
where cccc.rn = 1
order by cccc.coin

正如我猜想的那样:同一种货币不可能同时有两个条目。每种货币每5秒仅插入一次。因此,这应该符合您的要求:

declare @prices  table ([Date] int IDENTITY(1,1) primary key, Price float, coin varchar(3));  
insert into @prices  (coin, Price) values 
('GBP', 3.20),('EUR', 3.14),('USD', 3.14),
('GBP', 3.17),('EUR', 3.16),('USD', 3.11),
('GBP', 3.14),('EUR', 3.13),('USD', 3.16),
('GBP', 3.15),('EUR', 3.12),('USD', 3.17),
('GBP', 3.16),('EUR', 3.17),('USD', 3.11),
('GBP', 3.15),('EUR', 3.14),('USD', 3.12),
('GBP', 3.19),('EUR', 3.14),('USD', 3.16)

select
    case
        when NEW.Price > PREV.Price Then 'yes'
        else 'No'
    end as CURR_JUMP_UP
from
    (
        select top 1 COALESCE(Price,0) Price, [Date]
        from @prices where coin='GBP' order by [Date] desc
    ) NEW
    cross apply
    (
        select MAX(Price) Price from
        (
            select top 5 Price
            from @prices
            where coin='GBP' and [Date]<NEW.[Date]
            order by [Date] desc
        ) t
    ) PREV

触发器不选择数据。请出示扳机并解释你在做什么。另外,请解释在同时插入多行时要执行的操作。前面的5个值是否包括插入的值?除了触发器之外,还可以使用测试数据显示一个示例,因为您给出的描述并不完全清楚。一张图片抵得上千言万语,示例数据就是图片……您可以使用滞后或超前窗口功能,根据某种顺序检索下一个/上一个值。可以使用OVER子句返回最后5行中的最大值。如果上一次插入的货币价格大于上面所选的5,这不是返回的第一个条目吗?您是否在询问如何将插入表中的值与前5个查询返回的值进行比较?@MatBailie一张图片值千言万语……以格式化文本形式发布的数据值更高:PQuestion令人困惑,但我不这么认为认为前面5项的总和就是OP想要的。