как продлить дату по конкретному условию - PullRequest
0 голосов
/ 28 июня 2018

запрос на продление даты valid_till для месяца арендаторов, которые указали больше чем два раза

образец данных:

ref_id  referrer_id referrer_bonus_amount   referral_valid  valid_from  valid_till
263 5   2500    1   2015-07-05  2015-09-05
264 3   2500    1   2015-07-05  2015-09-05
265 5   1000    0   2015-12-13  2016-02-13
266 6   2500    0   2016-04-25  2016-06-24
267 10  1000    1   2015-07-01  2015-09-01
268 5   2500    1   2015-05-12  2015-07-12
269 10  2500    0   2015-08-05  2015-10-05

я хочу увеличить дату valid_till для referrer_id, который ссылался более чем в два раза. Чтобы узнать, кто ссылался более 2 раз, я использую этот код:

> select referrer_id
>         from Referrals group by referrer_id having count(referrer_id)>2

но как добавить один месяц для referrer_id> 2 в столбце valid_till. Я думаю, что dateadd должен быть использован, но я не мог понять, как.

Ответы [ 3 ]

0 голосов
/ 29 июня 2018
UPDATE [YourTable]
    SET [valid_till] = DATEADD(MONTH, 1, [valid_till])
WHERE [ref_id] IN (
    SELECT [ref_id]
    FROM [YourTable]
    GROUP BY [ref_id]
    HAVING COUNT([ref_id]) > 1
    )
0 голосов
/ 29 июня 2018

Я думаю, вы ищете этот метод:

SELECT
    ref_id
,   referrer_id
,   referrer_bonus_amount
,   referral_valid
,   valid_from
,   DATEADD(MONTH, 1, valid_till) AS valid_till
FROM (
SELECT 
    ref_id
,   referrer_id
,   referrer_bonus_amount
,   referral_valid
,   valid_from
,   valid_till
,   ROW_NUMBER() OVER(PARTITION BY referrer_id ORDER BY referrer_id) AS RN
FROM @test
) D
WHERE 
    RN > 2
0 голосов
/ 29 июня 2018

Попробуйте это

> UPDATE TableName
  set valid_till = DateAdd(month,1,valid_from)AS valid_till
  where referrer_id in (select referrer_id
        from Referrals group by referrer_id having count(referrer_id)>2)

в этом случае я предполагаю, что valid_from - это дата, к которой вы хотите добавить месяц, поскольку вы не указали

...