T-SQL GROUP BY: устранение нескольких вхождений - PullRequest
0 голосов
/ 06 октября 2018

Как я могу предотвратить несколько одинаковых строк цен в приведенном ниже запросе из-за разных значений даты?Мне нужно только показать первое вхождение записи, где цена отличается от предыдущих, но пропустить, пока не произойдет другое изменение в поле цены.

SELECT STOCKID, PRICE, TRANSTYPENAME, TRANSDATE
FROM VE_STOCKTRANS 
WHERE STOCKID = 6000 AND TANSTYPE IN (3500,3553)
GROUP BY PRICE, STOCKID, TRANSTYPENAME, TRANSDATE

т.е. мне нужно пропустить несколько строк 35.83333333 ивозьмите его только в первый раз (24/4/2018)

enter image description here

Изображение в ответ на ответ Гордона:

enter image description here

Ответы [ 3 ]

0 голосов
/ 06 октября 2018

Вы можете получить первую ПЕРЕДАЧУ так:

SELECT STOCKID, PRICE, TRANSTYPENAME, min(TRANSDATE)
FROM VE_STOCKTRANS 
WHERE STOCKID = 6000 AND TRANSTYPE IN (3500,3553)
GROUP BY PRICE, STOCKID, TRANSTYPENAME
0 голосов
/ 06 октября 2018
SELECT STOCKID, DISTINCT(PRICE), TRANSTYPENAME, TRANSDATE)
FROM VE_STOCKTRANS 
WHERE STOCKID = 6000 AND TANSTYPE IN (3500,3553)
GROUP BY PRICE, STOCKID, TRANSTYPENAME, TRANSDATE

Это может помочь ..

0 голосов
/ 06 октября 2018

Используйте LAG(), чтобы увидеть, изменилась ли цена:

SELECT STOCKID, PRICE, TRANSTYPENAME, TRANSDATE
FROM (SELECT st.*,
             LAG(st.price) OVER (PARTITION BY stockId ORDER BY transdate) as prev_price
      FROM VE_STOCKTRANS st
      WHERE STOCKID = 6000 AND TANSTYPE IN (3500, 3553)
     ) st
WHERE prev_price IS NULL OR prev_price <> price;

РЕДАКТИРОВАТЬ:

Если вы просто хотите получить список впервые, когда каждая цена видна (что довольноотличается от изменения цен, как вы отметили и описали в вопросе), используйте row_number():

SELECT STOCKID, PRICE, TRANSTYPENAME, TRANSDATE
FROM (SELECT st.*,
             ROW_NUMBER() OVER (PARTITION BY st.stockId, st.price ORDER BY st.transdate) as seqnum
      FROM VE_STOCKTRANS st
      WHERE STOCKID = 6000 AND TANSTYPE IN (3500, 3553)
     ) st
WHERE seqnum = 1;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...