2016-01-21 2 views
1

У меня есть таблица: tblpersonЗапрос все даты меньше указанной даты (месяц и год)

Есть три колонки в tblperson

id    amort_date  total_amort 
C000000004  12/30/2015  4584.00 
C000000004  01/31/2016  4584.00 
C000000004  02/28/2016  4584.00 

Пользователь должен будет предоставить дату выставления счетов @bill_date

я хочу подвести итог Amort всего менее чем даты, указанной пользователем на месяц и год основе, независимо от даты

Например

@bill_date = '1/16/2016' 

Result should: 

ID   sum_total_amort 
C000000004 9168.00 

Независимо от даты я хочу суммировать все AMORT меньше, чем в январе 2016 года

Это мой запрос, но он только вычисляет дату января 2016, она не включает в себя дату меньше, чем это:

DECLARE @bill_date DATE 
SET @bill_date='1/20/2016' 

DECLARE @month AS INT=MONTH(@bill_date) 
DECLARE @year AS INT=YEAR(@bill_date) 

SELECT id,sum(total_amort)as'sum_total_amort' FROM webloan.dbo.amort_guide 
WHERE loan_no='C000000004' 
AND MONTH(amort_date) = @month 
AND YEAR(amort_date) = @year 

GROUP BY id 

ответ

2

Вы могли бы использовать агрегирование и неравенства:

select id, sum(total_amort) 
from webloan.dbo.amort_guide 
where loan_no = 'C000000004' and 
     year(amort_date) * 12 + month(amort_date) <= @year * 12 + @month 
group by id; 

Кроме того, в SQL Server 2012+, вы можете просто использовать EOMONTH():

select id, sum(total_amort) 
from webloan.dbo.amort_guide 
where loan_no = 'C000000004' and 
     amort_date <= EOMONTH(@bill_date) 
group by id; 
1

Вы можете получить начало месяца использования:

DATEADD(MONTH, DATEDIFF(MONTH, 0, @bill_date), 0) 

Так, чтобы получить SUM(total_amort), ваш запрос должен быть:

SELECT 
    id, 
    SUM(total_amort) AS sum_total_amort 
FROM webloan.dbo.amort_guide 
WHERE 
    loan_no='C000000004' 
    AND amort_date < DATEADD(MONTH, DATEDIFF(MONTH, 0, @bill_date) + 1, 0) 
0

Вы проверяются на

AND MONTH(amort_date) < @month 
AND YEAR(amort_date) < @year 

Следовательно, запрос будет возвращать только результаты, где MONTH(amort_date)=MONTH(input_variable) AND YEAR(amort_date)=YEAR(input_variable)

Попробуйте DECLARE @bill_date ДАТА SET @ bill_date = '1/20/2016'

DECLARE @month AS INT=MONTH(@bill_date) 
DECLARE @year AS INT=YEAR(@bill_date) 

SELECT id,sum(total_amort)as'sum_total_amort' FROM webloan.dbo.amort_guide 
WHERE loan_no='C000000004' 
AND MONTH(amort_date) < @month 
AND YEAR(amort_date) < @year 

GROUP BY id 
Смежные вопросы