select Query issue getting based on the DATEDIFF
-
Monday, May 07, 2012 5:26 AM
I have an table EmployeerAudit
CustomerID columnName AmendDatetime 1111 Mobilenumber 2012-01-24 12:46:06.680 1111 HomeNumber 2012-05-04 12:51:30.603 2111 Mobilenumber 2012-01-24 12:46:06.680 2111 HomeNumber 2012-05-04 12:51:30.603 3411 Mobilenumber 2012-01-24 12:46:06.680 3411 HomeNumber 2012-01-24 12:51:30.603
Here i need to get the result where customer who have update their Mobilenumber or HomeNumber whose AmendDatetime is greater then
100 days.case1:
if any customer who has updated his Mobilenumber or HomeNumber whose AmendDatetime is greater then
100 days. then we should not get those customer hope my Question is clear
1:
select * from EmployeerAudit
Where DATEDIFF(DAY ,CA.AmEndDatetime ,getdate())>100
and (CA.ColumnName ='Mobilenumber' or CA.ColumnName ='HomeNumber')2:
select * from EmployeerAudit
Where DATEDIFF(DAY ,CA.AmEndDatetime ,getdate())>100
and CA.ColumnName in ('Mobilenumber','HomeNumber')As here CustomerID 1111 has a an Amenddatetime which is less then 100 days,so in that case i should not get the
customerID 1111
All Replies
-
Monday, May 07, 2012 5:31 AMselect * from EmployeerAudit
Where DATEDIFF(DAY ,CA.AmEndDatetime ,getdate())>100
and CA.ColumnName in ('Mobilenumber','HomeNumber') and CustomerID
not in(select CustomerID from EmployeerAudit
Where DATEDIFF(DAY ,CA.AmEndDatetime ,getdate())<=100
and CA.ColumnName in ('Mobilenumber','HomeNumber'));
goMany Thanks & Best Regards, Hua Min
-
Monday, May 07, 2012 6:31 AMAnswerer
create table #t (custid int,colname varchar(20),dt datetime)
insert into #t values (1111,'Mobilenumber','2012-01-24 12:46:06.680')
insert into #t values (1111,'HomeNumber','2012-05-04 12:51:30.603')
insert into #t values (2111,'Mobilenumber','2012-01-24 12:46:06.680')
insert into #t values (2111,'HomeNumber','2012-05-04 12:46:06.680')
insert into #t values (3111,'Mobilenumber','2012-01-24 12:46:06.680')
insert into #t values (3111,'HomeNumber','2012-01-24 12:46:06.680')
with cte
as
(
select * from #t ca
Where DATEDIFF(DAY ,CA.dt ,getdate())>100
and CA.colname in ('Mobilenumber','HomeNumber')
) select * from cte where not exists (
select * from #t where #t.custid=cte.custid
and DATEDIFF(DAY ,#t.dt ,getdate())<=100)Best Regards, Uri Dimant SQL Server MVP http://dimantdatabasesolutions.blogspot.com/ http://sqlblog.com/blogs/uri_dimant/
- Proposed As Answer by Iric WenModerator Tuesday, May 08, 2012 8:09 AM
- Marked As Answer by Iric WenModerator Monday, May 14, 2012 7:59 AM
-
Monday, May 07, 2012 6:45 AM
Hi,
You may try following
select * from EmployeerAudit CA
Where CustomerID
not in(select CustomerID from EmployeerAudit CA1
Where DATEDIFF(DAY ,CA1.AmEndDatetime ,getdate())<=100
and CA1.ColumnName in ('Mobilenumber','HomeNumber'));Regards
Meer Hassan
-
Monday, May 07, 2012 9:32 AM
Here's one way: (I think this is what you're asking?) Here is a way to only list a customer if any of their phone numbers (Mobile or Home) have not changed in the last 100 days.
Declare @T Table (custid int,colname varchar(20),dt datetime) insert into @t values (1111,'Mobilenumber','2012-01-24 12:46:06.680') insert into @t values (1111,'HomeNumber','2012-05-04 12:51:30.603') insert into @T values (2111,'Mobilenumber','2012-01-24 12:46:06.680') insert into @t values (2111,'HomeNumber','2012-05-04 12:46:06.680') insert into @t values (3111,'Mobilenumber','2012-01-24 12:46:06.680') insert into @t values (3111,'HomeNumber','2012-01-24 12:46:06.680') Select * from @T T Inner Join (Select CustID, Max(dt) as MaxDt from @t Group by CustID Having DateDiff(day, max(dt), getdate()) > 100) as DTMax on DTMax.Custid = T.CustID
- Edited by johnqflorida Monday, May 07, 2012 9:33 AM
- Edited by johnqflorida Monday, May 07, 2012 9:33 AM
- Edited by johnqflorida Monday, May 07, 2012 9:39 AM Clarified answer

