SQL-запрос Найти все товары, стоимость которых возросла в определенные 2 дня - PullRequest
0 голосов
/ 11 февраля 2019

Мне интересно, могу ли я сделать это с помощью SQL-запроса.У меня есть таблица с именем «data», которая содержит название продукта, дату и номер продажи.

моя таблица выглядит следующим образом:

Product         date       Sale

apple           1/1/2019   5
apple           2/1/2019   4
apple           3/1/2019   3
apple           4/1/2019   2
apple           5/1/2019   1
orange          1/1/2019   1
orange          2/1/2019   2
orange          3/1/2019   3
orange          4/1/2019   4
orange          5/1/2019   5
pear            1/1/2019   6
pear            2/1/2019   4
pear            3/1/2019   3
pear            4/1/2019   2
pear            5/1/2019   5
strawberry      1/1/2019   6
strawberry      2/1/2019   3 
strawberry      3/1/2019   7  
strawberry      4/1/2019   4
strawberry      5/1/2019   2

Я хотел бы задать запрос SQL для поискатовар (ы), у которых увеличен номер продажи на определенные 2 даты.

например, найти все товары, чей номер продажи на 01.03.2009 больше, чем 01.01.2009, и он должен вернуть апельсин и клубнику.

Я довольно новичок в мире программирования, и любая помощь приветствуется.Заранее спасибо!

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019
DECLARE @FasatDate Date ='3-1-2019'
DECLARE @SecondDate Date ='1-1-2019'

SELECT T1.Product,T1.[date] FasatDate,T1.Sale FasatDateSale,T2.[date] SecondDate,T2.Sale SecondDateSale FROM (
SELECT * FROM DATA AS [DA]
WHERE [DA].[date]=@FasatDate) T1

INNER JOIN  (
SELECT * FROM DATA AS [DA]
WHERE [DA].[date]=@SecondDate)T2
on
t1.Product = t2.Product AND t1.Sale>t2.Sale
0 голосов
/ 11 февраля 2019

Вы можете сделать это как JOIN, но я бы порекомендовал:

select t1.*, t2.sales
from t t1 join
     t t2
     on t2.product = t1.product and
        t2.sales > t1.sales
where t1.date = '1/1/2019'
      t2.date = '3/1/2019';

Примечание. Для констант даты следует использовать стандартные форматы даты - либо '2019-01-03', либо '2019-03-01 'в зависимости от того, что вы имеете в виду.

Вы также можете сделать это с помощью агрегации:

select product
from t
where t.date in ('1/1/2019', '3/1/2019')
group by product
having (sum(case when t.date = '1/1/2019' then sales end) <
        sum(case when t.date = '3/1/2019' then sales end)
       );
0 голосов
/ 11 февраля 2019

Вы можете попробовать использовать коррелированный подзапрос

DEMO

select name,sdate,amount from data a where exists 
  (
   select 1 from data b where a.name=b.name and b.sdate in ('1/1/2019','3/1/2019') and b.amount>a.amount
   and a.sdate<b.sdate
  ) 
and a.sdate in ('1/1/2019','3/1/2019')

OUTPUT:

name        sdate               amount
orange      01/01/2019 00:00:00   1
strawberry  01/01/2019 00:00:00   6
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...