2013-09-26 6 views
1

Вот пример таблицы. using sql-server Я пытаюсь вытащить максимальную (дату входа) для каждого сотрудника ниже, но «дата входа» в базе данных - тип данных int. я могу выбрать его достаточно легко, то есть,конверсий sql в select statement

select employee,title,max(login_date) from employee group by employee,title 

можно использовать подстроку для преобразования login_date («ГГГГММ») к переменной даты,

set @var_year=select (substring((select login_date),1,4)) 

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

Employee Title   Login_Date    
----------------------------------------- 
Mike  VP   201301 
Amy  CEO   201201      
Joe  Office Mgr 201105 
Andy  Admin Asst 201308 
Joe  Office Mgr 201205 
Andy  Admin Asst 201309 
Joe  Office Mgr 201205 
Andy  Admin Asst 201309 
+0

Каков лучший способ запросить его тогда, потому что я хочу, чтобы новое поле «дата» было правильным, а не просто захвачено с первого результата – Phil

+0

вы можете показать ожидаемые результаты? – Kaf

ответ

1

Несколько способов сделать это. Один будет

Select m.employee,m.title, 
convert(int,substring(thisisNOTadate,1,4)) as [Year], 
convert(int,substring(thisisNOTadate,5,2)) as [Month] 
From 
(select employee,title,max(login_date) as ThisisNOTadate 
from employee group by employee,title 
) m 

Лично после пощечины, которые когда-либо называли строку в формате YYYYMM login_date несколько раз, я бы переделки стол так login_date был на самом деле свидание с чем-то вроде Convert(DateTime,Convert(VarChar(6), Login_date) + '01'), а затем все, что необходимые части даты могут использовать эти стандартные функции даты.

Так на основе вашего комментария к г-ну ReBand раньше, чем

select employee,title, 
     max(convert(datetime,Convert(varchar(6),login_date) + '01')) as arealdate 
From employee group by employee,title 

был бы другим.

+0

Я полностью согласен с Тони. Его поле даты в нашей программе, но оно переходит в поле int в базе данных. Спасибо Тони, я думаю, что смогу это использовать. – Phil

+0

Я собирался дать вам + мистер Ребанд. Я не был доволен тем, что не ввел стиль, и не знал, что он будет доволен 126 даже без разделителей дефиса. –

+0

convert (datetime, Convert (varchar (6), login_date) + '01'), 126) для тех, кто не видит удаленные сообщения –