У меня есть таблица, которая имеет место Процентной ресурсов, имеющих UserId, дата вступления в силу (тип данных Дата) & Дата окончания (тип данных Дата)Выберите запись по диапазону дат в SQL Server
RateId UserId Rate EffectiveDate EndDate
============================================================================
21 169 82 2015-01-01 00:00:00.000 2025-12-30 00:00:00.000
23 78 58 2015-07-01 00:00:00.000 2015-07-14 00:00:00.000
24 88 68 2015-07-01 00:00:00.000 2025-12-30 00:00:00.000
25 114 78 2015-07-01 00:00:00.000 2025-12-30 00:00:00.000
26 218 56 2015-07-01 00:00:00.000 2025-12-30 00:00:00.000
27 78 89 2015-07-15 00:00:00.000 2025-12-30 00:00:00.000
28 174 69 2015-01-01 00:00:00.000 2015-08-14 00:00:00.000
29 174 59 2015-08-15 00:00:00.000 2025-12-30 00:00:00.000
30 235 65 2015-01-01 00:00:00.000 2015-08-14 00:00:00.000
31 235 84 2015-08-15 00:00:00.000 2025-12-30 00:00:00.000
32 234 49 2015-08-01 00:00:00.000 2015-08-14 00:00:00.000
33 234 59 2015-08-15 00:00:00.000 2025-12-30 00:00:00.000
34 303 89 2014-10-01 00:00:00.000 2015-08-14 00:00:00.000
35 303 75 2015-08-15 00:00:00.000 2025-12-30 00:00:00.000
36 481 84 2015-01-01 00:00:00.000 2025-12-30 00:00:00.000
нужно выбрать ставки для тех, только для пользователя, чья ставка падает только на диапазон текущего месяца (между датой начала & Конечная дата месяца).
Это то, что я пробовал до сих пор.
DECLARE @MONTH INT
DECLARE @YEAR INT
DECLARE @STARTDATEOFMONTH DATE
DECLARE @LASTDATEOFMONTH DATE
SET @MONTH = 8 /*Current Month*/
SET @YEAR = 2015 /*Current Year*/
SET @STARTDATEOFMONTH = DATEADD(MONTH,@MONTH-1,DATEADD(YEAR,@YEAR-1900,0)) /*FIRST*/
SET @LASTDATEOFMONTH = DATEADD(DAY,-1,DATEADD(MONTH,@MONTH,DATEADD(YEAR,@YEAR-1900,0))) /*LAST*/
SELECT * FROM TRNS_RATE_DETAILS
WHERE @STARTDATEOFMONTH >= EFFECTIVEDATE
AND @LASTDATEOFMONTH <= ENDDATE
Я расчета Дата начала и Дата окончания каждого месяца (например, в приведенном выше запросе я прошел текущий месяц = 8 & год = 2015)
выход запроса является
RateId UserId Rate EffectiveDate EndDate
============================================================================
21 169 82 2015-01-01 00:00:00.000 2025-12-30 00:00:00.000
24 88 68 2015-07-01 00:00:00.000 2025-12-30 00:00:00.000
25 114 78 2015-07-01 00:00:00.000 2025-12-30 00:00:00.000
26 218 56 2015-07-01 00:00:00.000 2025-12-30 00:00:00.000
27 78 89 2015-07-15 00:00:00.000 2025-12-30 00:00:00.000
36 481 84 2015-01-01 00:00:00.000 2025-12-30 00:00:00.000
Как вы можете видеть, я могу получить только те записи, которые появляются до начала даты текущего месяца & после последней даты текущего месяца.
Мне нужно получить те записи, чья дата вступления в силу & Дата окончания между датой начала & Конечная дата каждого месяца.
Скажите, у меня есть тариф = 45 для ресурса (UserId) для даты между 1 января-2015 годами (Дата вступления в силу) до 14 августа (дата окончания) и другая ставка = 75 для даты между 15 августа 2015 года (эффективная Дата) до 30 декабря 2025 года (Дата окончания)
Так что я действительно хочу обе цены (45 & 75) за тот же ресурс за месяц с августа 2015 года?
Пожалуйста, помогите мне!
Спасибо!
Зачем вам нужен последний день текущего месяц? Подумайте об этом по-другому - вы хотите> = первый день текущего месяца и <первый день следующего месяца. Не запрос, который решает ваш вопрос, а определенно более простой способ рассчитать ваш диапазон. –
Вы хотите текущий месяц (т. Е. Август) или 30-дневный период? –
@AaronBertrand Скажите одному пользователю, что у меня есть только один курс с 1 января, 15 до 1 декабря, 15, но для другого пользователя у меня есть два тарифа: один из 1 ян, 15-14 августа, 15 и второй - с 15 августа, 15 - 31 декабря, 15 Может ли предложение ur работать в этом случае? –