Solved

Detect Duplicate Values

Posted on 2004-09-28
5
257 Views
Last Modified: 2008-02-01
Hello Experts,
Here's a simple one :-)
I have a table with (simplified) these fields:
DateTime, PhoneNumber, Duration.
I want to find
(A) a phone number that was called 5 times during a datetime interval (let's say, between '2004-09-20 08:00:00' and '2004-09-25 20:00:00' , and know the DateTime value for that. What's the SQL statement I should use?
and
(B) the same as (A), but I want to narrow down the datetime interval per day. For example, the first day between 1pm and 1:30 pm, the second day between 9:15 am and 9:35 am, etc.
I'm not a SQL expert, so please be precise and complete in your syntax.
Thanks!
0
Comment
Question by:drotkopf
  • 3
5 Comments
 
LVL 12

Expert Comment

by:geotiger
Comment Utility
(A)

select phonenumber, count(*) as cnt
from your_table
where [DATETIME] between cast('2004-09-20 08:00:00' as datetime ) and cast('2004-09-25 20:00:00' as datetime )
having count(*) = 5
group by phonenumber;

(B) the same with specific time period:

select phonenumber, count(*) as cnt
from your_table
where [DATETIME] between cast('2004-09-20 13:00:00' as datetime ) and cast('2004-09-20 13:30:00' as datetime )
Or [DATETIME] between cast('2004-09-21 09:15:00' as datetime ) and cast('2004-09-21 09:35:00' as datetime )
having count(*) = 5
group by phonenumber;
0
 
LVL 69

Expert Comment

by:ScottPletcher
Comment Utility
I may have misinterpreted your q, but if not, I think the second one is somewhat trickier than that because you could have 5 calls within one time period only and presumably you wouldn't want a match then, that is, only match if there was at least one call in every different period and 5 overall, say.  

If I have misinterpreted, please let me know.

Something like this should guarantee at least one call in each time period and a certain number overall:


SELECT phoneNumber, time1Count + time2Count AS [Total Calls]
FROM (
      SELECT phonenumber,
            SUM(CASE WHEN [datetime] BETWEEN '2004-09-20 13:00:00' AND '2004-09-20 13:30:00' THEN 1 ELSE 0 END) AS time1Count,
            SUM(CASE WHEN [datetime] BETWEEN '2004-09-21 09:15:00' AND '2004-09-21 09:35:00' THEN 1 ELSE 0 END) AS time2Count
      FROM yourTable
      GROUP BY phonenumber
) AS derived
WHERE time1Count > 0 AND time2Count > 0
AND (time1Count + time2Count) >= 5
0
 

Author Comment

by:drotkopf
Comment Utility
geotinger: it works fine, but I'm getting too many answers (750+).

ScottPletcher: you  had a very good idea, however, please check it, because I'm getting 0 records as result, even though I'm entering from 1 am to 11 pm (calls are made 8-8). If I'm getting 750+ using geotinger's, I should get them with you statement also when using the 1 am to 11 pm range for each of the days. Am I wrong?
Also, I think we can do away with (time1Count + time2Count + ...) >= 5 because that comes automatic with WHERE time1Count > 0 AND time2Count > 0... Isn't it?

I'd appreciate you input.
0
 
LVL 69

Accepted Solution

by:
ScottPletcher earned 125 total points
Comment Utility
>>  I should get them with you statement also when using the 1 am to 11 pm range for each of the days. Am I wrong? <<

No, not necessarily.  With my version, you would only get phoneNumbers that had called on *every* day, not just multiple times on the same day.
0
 
LVL 69

Expert Comment

by:ScottPletcher
Comment Utility
>> Also, I think we can do away with (time1Count + time2Count + ...) >= 5 because that comes automatic with WHERE time1Count > 0 AND time2Count > 0... Isn't it? <<

You're right, depending on the number of different date ranges.  If you have five different ranges, and only require a total of 5 or more, then yes, you don't need it.  But of course if you have only 2 or 3 different ranges but want a total of 5 calls, then you will need to compare the total also.
0

Featured Post

How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

Join & Write a Comment

I wrote this interesting script that really help me find jobs or procedures when working in a huge environment. I could I have written it as a Procedure but then I would have to have it on each machine or have a link to a server-related search that …
Ever wondered why sometimes your SQL Server is slow or unresponsive with connections spiking up but by the time you go in, all is well? The following article will show you how to install and configure a SQL job that will send you email alerts includ…
Viewers will learn how to use the INSERT statement to insert data into their tables. It will also introduce the NULL statement, to show them what happens when no value is giving for any given column.
Viewers will learn how to use the SELECT statement in SQL to return specific rows and columns, with various degrees of sorting and limits in place.

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

10 Experts available now in Live!

Get 1:1 Help Now