#sql-server
#sql-сервер
Вопрос:
ID mobileno dateofregistration registrationstate
44 1674174925 2011-04-18 10:17:30.670 0
45 1677864168 2011-04-18 10:20:22.450 1
46 1677864161 2011-04-18 20:47:35.293 0
47 1674174925 2011-04-19 09:28:55.200 1
48 1674174925 2011-04-19 09:28:56.200 0
49 1674174925 2011-04-19 09:28:57.200 1
50 1674174925 2011-04-18 10:17:30.670 0
51 1677864168 2011-04-18 10:20:22.450 1
52 1677864161 2011-04-20 20:47:35.293 0
53 1674174925 2011-04-22 09:28:55.200 1
54 1674174925 2011-04-28 09:28:56.200 0
55 1674174925 2011-04-28 09:28:57.200 1
Моя проблема в том, как подсчитать строки со следующими условиями:
registrationstate = 1
и datediff(day,dateofregistration) > 30
для отдельного мобильного номера.
Здесь результатом будет 1
Комментарии:
1. Что вы подразумеваете под «результатом будет 1»? «1» чего?? Что вы ищете — количество мобильных устройств нет. которые соответствуют этим критериям (я получаю за это 2 …..) или что??? Вообще непонятно…..
Ответ №1:
прежде всего, datediff
требуется 3 аргумента
DATEDIFF ( datepart , startdate , enddate )
Я предполагаю, что вы хотите сравнить с сегодняшней датой, поэтому вы можете использовать getdate()
select * from yourtable
where registrationstate = 1
and datediff( day, dateofregistration, getdate() ) > 30
если getdate()
вернуть 2011-05-04 , вы получите следующий вывод
------------------------------------------------------------
ID mobileno dateofregistration registrationstate
------------------------------------------------------------
45 1677864168 2011-04-18 10:20:22.450 1
47 1674174925 2011-04-19 09:28:55.200 1
49 1674174925 2011-04-19 09:28:57.200 1
51 1677864168 2011-04-18 10:20:22.450 1
53 1674174925 2011-04-22 09:28:55.200 1
55 1674174925 2011-04-28 09:28:57.200 1
------------------------------------------------------------
теперь вы хотите сгруппировать результаты по mobileno
, а также вернуть количество строк в группе. Вы можете использовать COUNT(*)
агрегатную функцию для возврата количества строк в группе
select COUNT(*) as total, mobileno from yourtable
where registrationstate = 1
and datediff( day, dateofregistration, getdate() ) > 30
group by mobileno
вы получите следующий вывод
------------------------------------------------------------
mobileno total
------------------------------------------------------------
1677864168 2
1674174925 4
------------------------------------------------------------