2013-11-11 9 views
0

Я пытаюсь выяснить способ выполнения запроса, который будет получать все данные старше шести месяцев, без каких-либо новых данных. Я посмотрю, смогу ли я правильно подвести итог:Исключение даты SQL Server 2008

select u.USER_FirstName, u.USER_LastName, 
    u.USER_LastSession, c.Login_Name 

FROM USER u 
    JOIN Customer c 
     ON u.USER_Customer_Identity=c.Customer_Identity 

Where u.USER_LastSession < getdate()-180 

Order by USER_LastSession 

Это то, что я нашел на SO до сих пор, но проблема заключается в том, что USER.USER_LastSession записывает значения для каждого войти (так что некоторые Customer.Login_Name значения не нужны для возврата). I только хотите те, которые больше шести месяцев, без возврата результата, если они являются также, записанные в срок менее шести месяцев. Пример данных:

USER_LastSession login_name

2012-08-29 21: 33: 30,000 ТЕСТ/ТЕСТ

2012-12-25 13: 12: 23,346 Пример/Пример

2013-10 -30 17: 13: 45.000 TEST/TEST

Я бы не хотел возвращать TEST/TEST, так как есть данные за последние шесть месяцев. Я хотел бы, однако, вернуться к примеру ПРИМЕР/ПРИМЕР, поскольку он имеет только данные старше шести месяцев. Я предполагаю, что, возможно, что-то, что я упустил, - прошу простить меня, если на это уже есть ответ (я смог найти ответ «получить старше шести месяцев»). Любая помощь очень ценится!

ответ

0
SELECT ... 
FROM User u 
JOIN Customer c ON u.USER_Customer_Identity=c.Customer_Identity 
WHERE u.USER_Customer_Identity NOT IN 
    (SELECT USER_Customer_Identity 
    FROM User 
    WHERE USER_LastSession >= getdate() - 180) 
ORDER BY USER_LastSession 
0
with cte as (
    select Login_Name, max(USER_LastSession) LastSession 
    FROM USER u 
    JOIN Customer c 
     ON u.USER_Customer_Identity = c.Customer_Identity 
    group by Login_Name 
) 

select * 
from cte 
where LastSession < getdate()-180 
+0

Это плохой дизайн, однако ... таблица пользователь должен иметь только информацию о пользователе раз. И такая информация о регистрации сеанса должна размещаться в другом месте ... возможно, в журнальной таблице. –

+0

Да, я знаю. =) Я пытаюсь обойти это - я думаю, что это сделал трюк. Большое спасибо за ваш ответ! – user2980961