Solved

sql query.

Posted on 2008-10-08
12
177 Views
Last Modified: 2012-05-05
i have 2 tables...  client and games.....

in client i have many columns, of which 2 are client id and user id

in games i have many columns , of which one is client id

now i need to get to know how many games are generated by the user within 30 days.......... from that userid.



0
Comment
Question by:sakvk
[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
  • 6
  • 4
  • 2
12 Comments
 
LVL 60

Expert Comment

by:Kevin Cross
ID: 22672828
Try something like this substituting my made up column names with real ones.
SELECT Count(g.*) As NumGamesPlayed
FROM client c INNER JOIN games g
ON c.clientID = g.clientID
WHERE c.userID = 'u1234'
AND g.datePlayed >= DateAdd(dd, -30, DateDiff(dd, 0, getdate()))

Open in new window

0
 
LVL 35

Expert Comment

by:Terry Woods
ID: 22672846
select client.userid, count(*)
from client inner join games on client.clientid = games.cliented
group by client.userid
0
 
LVL 35

Expert Comment

by:Terry Woods
ID: 22672855
Ignore my suggestion... it was incomplete, and mwvisa1's looks good!
0
Technology Partners: 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!

 

Author Comment

by:sakvk
ID: 22675561
hi mwvisa1,

when u say
g.datePlayed >= DateAdd(dd, -30, DateDiff(dd, 0, getdate())), whts dd? in that... why do we need to do DateAdd and then Datediff....

Can I just do a DateDiff(timestamp,g.dateplayed) < '45'
 
please let me know...

the other part of the query seems good.
0
 
LVL 60

Expert Comment

by:Kevin Cross
ID: 22675909
>>now i need to get to know how many games are generated by the user within 30 days.......... from that userid.

g.datePlayed >= DateAdd(dd, -30, DateDiff(dd, 0, getdate()))

dd = day interval
-30 = goes back 30 days from getdate() (i.e. today)
DateDiff = used to ensure that we go back to 30 days ago at midnight, so that all games for that day are included regardless of time.  If you just do DateAdd it will add x number of days with current timestamp which in a >= statement will exclude records for that day with timestamps earlier than current time the query is run.  

Hopefully that makes sense.
0
 
LVL 60

Expert Comment

by:Kevin Cross
ID: 22675921
g.datePlayed ==> column name in your games or whichever table is used to determine when a game was generated/played/etc.  This is field you use to determine what is 30 days ago, so whatever the name is change that here.  
0
 

Author Comment

by:sakvk
ID: 22677854
so can i say dd is CURTIMESTAMP()

DateAdd(CURRENT_TIMESTAMP, -30, DateDiff(CURTIMESTAMP(), 0, getdate()))

as all the time is in date and time format
i think.. its DATE_ADD or ADDDATE......

if i am abl to get this , then the whole query works......
0
 
LVL 60

Expert Comment

by:Kevin Cross
ID: 22678124
I am sorry, that was bad of me too assume.  What SQL platform are you on?  CURRENT_TIMESTAMP() is MySQL I believe, am I correct on that?  

If so, please use this as reference for functions I am about to use:
http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html
(specifically) http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_date-add

DATE_ADD(NOW(), INTERVAL -30 DAY)

NOW() - INTERVAL 30 DAY

For SQL server, the DateAdd(dd, -30, DateDiff(dd, 0, getdate())) was already implemented code, no need to change anything unless you want to adjust the 30 to go more/less days in past.
0
 
LVL 60

Accepted Solution

by:
Kevin Cross earned 500 total points
ID: 22678156
Putting it together:
SELECT Count(g.*) As NumGamesPlayed
FROM client c INNER JOIN games g
ON c.clientID = g.clientID
WHERE c.userID = 'u1234'
AND g.datePlayed >= DATE_ADD(DATE(NOW()), INTERVAL -30 DAY); 

Open in new window

0
 

Author Comment

by:sakvk
ID: 22680114
yes boss this worked.. thanku
0
 

Author Closing Comment

by:sakvk
ID: 31504410
very happy with the solution....
0
 
LVL 60

Expert Comment

by:Kevin Cross
ID: 22681062
You are welcome.
0

Featured Post

Turn Insights Into Action

You’ve already invested in ITSM tools, chat applications, automation utilities, and more. Fortify these solutions with intelligent communications so you can drive business processes forward.

With xMatters, you'll never miss a beat.

Question has a verified solution.

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

As they say in love and is true in SQL: you can sum some Data some of the time, but you can't always aggregate all Data all the time! Introduction: By the end of this Article it is my intention to bring the meaning and value of the above quote to…
'Between' is such a common word we rarely think about it but in SQL it has a very specific definition we should be aware of. While most database vendors will have their own unique phrases to describe it (see references at end) the concept in common …
This is a high-level webinar that covers the history of enterprise open source database use. It addresses both the advantages companies see in using open source database technologies, as well as the fears and reservations they might have. In this…
In this brief tutorial Pawel from AdRem Software explains how you can quickly find out which services are running on your network, or what are the IP addresses of servers responsible for each service. Software used is freeware NetCrunch Tools (https…

719 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