SQL Server数据库存储过程查询

时间:2019-01-25 07:33:54

标签: sql-server-2017

I have two tables as below:

1) UserFavouriteCurrencies

CREATE TABLE [dbo].[UserFavouriteCurrencies](
    [Id] [bigint] IDENTITY(1,1) NOT NULL,
    [UserId] [int] NULL,
    [CurrencyId] [int] NULL,
    [EntryDate] [datetime] NULL,
 CONSTRAINT [PK_UserFavouriteCurrencies] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

上表存储着用户最喜欢的公司的数据

2) CurrencyRates

CREATE TABLE [dbo].[CurrencyRates](
    [Id] [bigint] IDENTITY(1,1) NOT NULL,
    [CurrencyId] [int] NULL,
    [Price] [float] NULL,
    [Open_24h] [float] NULL,
    [Volume_24h] [float] NULL,
    [Low_24h] [float] NULL,
    [High_24h] [float] NULL,
    [Volume_30d] [float] NULL,
    [BestBid] [float] NULL,
    [BestAsk] [float] NULL,
    [TradeId] [bigint] NULL,
    [PriceDate] [datetime] NULL,
    [PriceDateTimestamp] [bigint] NULL,
    [OpenInterest] [float] NULL,
 CONSTRAINT [PK_CoinbaseTickerRatesMaster] PRIMARY KEY CLUSTERED 
(
    [Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

上表包含货币的汇率明细。

Call : EXEC sp_Getdata 1(Here 1 in UserId of UserFavouriteCurrencies table)

I need all records for particular currencies last latest records in one query as below

DECLARE @Today DATETIME = GETDATE(), @PrevDate DATETIME = GETDATE()<br> 

SELECT TOP 1 Price, PriceDate, Volume_24h, PriceDateTimestamp
FROM CurrencyRates
WHERE CurrencyId = @CurrencyId AND PriceDate <= @Today
ORDER BY PriceDateTimestamp DESC

上面的查询仅选择一种特定货币的数据,但是我需要与UserFavouriteCurrencies表中添加的与用户相关的数据。

请帮助我为此查询编写存储过程

Thanks in advance.

1 个答案:

答案 0 :(得分:0)

对于UserFavouriteCurrencies表中的每种货币,请考虑以下查询

SELECT 
     uc.Id      -- This is the userId
    ,cr.Price
    ,cr.PriceDate,
    ,cr.Volume_24h
    ,cr.PriceDateTimestamp
FROM 
    UserFavouriteCurrencies AS uc 
  INNER JOIN CurrencyRates AS cr   -- See Hints : 1
  ON cr.CurrencyId = uc.CurrencyId
WHERE
   PriceDate <= GETDATE()
  AND
   uc.Id = @Id
   -- You can add other Predicates Here...

提示:

  1. 如果CurrencyRates中可能不存在用户的货币,请考虑使用LEFT OUTER JOIN !这将引入您必须处理的NULL