Solved

Detect Duplicate Values

Posted on 2004-09-28
5
299 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 3
5 Comments
 
LVL 12

Expert Comment

by:geotiger
ID: 12173130
(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:Scott Pletcher
ID: 12173226
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
ID: 12173808
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:
Scott Pletcher earned 125 total points
ID: 12173846
>>  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:Scott Pletcher
ID: 12173856
>> 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

Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Load balancing is the method of dividing the total amount of work performed by one computer between two or more computers. Its aim is to get more work done in the same amount of time, ensuring that all the users get served faster.
In this article we will learn how to fix  “Cannot install SQL Server 2014 Service Pack 2: Unable to install windows installer msi file” error ?
This video shows, step by step, how to configure Oracle Heterogeneous Services via the Generic Gateway Agent in order to make a connection from an Oracle session and access a remote SQL Server database table.
This videos aims to give the viewer a basic demonstration of how a user can query current session information by using the SYS_CONTEXT function

734 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