Запрос процедуры хранения базы данных Sql-сервера - PullRequest
0 голосов
/ 25 января 2019
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 голосов
/ 25 января 2019

Для каждой валюты в таблице 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. Подумайте об использовании LEFT OUTER JOIN, если валюта пользователя может отсутствовать в CurrencyRates!Это, однако, введет NULL, которые вы должны обработать
...