[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
?
Solved

sql query.

Posted on 2008-10-08
12
Medium Priority
?
185 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
Learn how to optimize MySQL for your business need

With the increasing importance of apps & networks in both business & personal interconnections, perfor. has become one of the key metrics of successful communication. This ebook is a hands-on business-case-driven guide to understanding MySQL query parameter tuning & database perf

 

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 2000 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

Tech or Treat!

Submit an article about your scariest tech experience—and the solution—and you’ll be automatically entered to win one of 4 fantastic tech gadgets.

Question has a verified solution.

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

This post looks at MongoDB and MySQL, and covers high-level MongoDB strengths, weaknesses, features, and uses from the perspective of an SQL user.
An alternative to the "For XML" way of pivoting and concatenating result sets into strings, and an easy introduction to "common table expressions" (CTEs). Being someone who is always looking for alternatives to "work your data", I came across this …
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increased…
In this video, Percona Solutions Engineer Barrett Chambers discusses some of the basic syntax differences between MySQL and MongoDB. To learn more check out our webinar on MongoDB administration for MySQL DBA: https://www.percona.com/resources/we…
Suggested Courses

656 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