Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Detect Duplicate Values

Posted on 2004-09-28
5
Medium Priority
?
309 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
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 70

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 70

Accepted Solution

by:
Scott Pletcher earned 500 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 70

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

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

This article shows gives you an overview on SQL Server 2016 row level security. You will also get to know the usages of row-level-security and how it works
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 ?
Via a live example combined with referencing Books Online, show some of the information that can be extracted from the Catalog Views in SQL Server.
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

877 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