André Ferreira
André Ferreira

Reputation: 185

SQL count Query retrieving 0

i want to list the amount of views per object_id, between the current date and the date year ago. So, i have this Query:

SELECT count(*) FROM event_logs WHERE object_id=252 AND object_type='product' AND event_type='view' AND event_date BETWEEN 2014-02-14 AND 2015-02-14 GROUP BY month(event_date)

And the following table:

event_id | user_id | objectd_id | object_type | event_type | event_date
1        | 1       |    252     |   product   | view       | 2014-02-25 00:00:00
2        | 1       |    252     |   product   | view       | 2015-02-12 19:36:05
3        | 1       |    252     |   product   | view       | 2015-01-05 19:36:05

The problem is when i execute the query, show an amount of results of 0 (zero),

Could have i been doing wrong?

Please help and thank you all for your attention!

Upvotes: 0

Views: 27

Answers (2)

Gordon Linoff
Gordon Linoff

Reputation: 1269703

One problem is the event_date constants:

SELECT count(*)
FROM event_logs
WHERE object_id = 252 AND
      object_type = 'product' AND 
      event_type = 'view' AND
      event_date BETWEEN 2014-02-14 AND 2015-02-14
------------------------^ ---------^---^----------^ missing quotes
GROUP BY month(event_date);

Date constants should be in single quotes. Otherwise, these are treated as arithmetic -- 2014 - 2 - 14 = 1998, which is not really a valid date.

Also, if you want the total value, it is unclear why you are grouping by the month. You can use CURRENT_DATE and date arithmetic and not have to hardcode the dates:

SELECT count(*)
FROM event_logs
WHERE object_id = 252 AND
      object_type = 'product' AND 
      event_type = 'view' AND
      event_date <= CURRENT_DATE and
      event_date > date_sub(CURRENT_DATE, interval -1 year);

Depending on the exact logic, you might want to change the <= to < or whatever -- depending on whether you want to include the end dates. Note: if event_date has a time component, then you might want to use date(event_date) to strip it off.

Upvotes: 2

vitalik_74
vitalik_74

Reputation: 4591

Change to this

BETWEEN '2014-02-14 00:00:00' AND '2015-02-14 23:59:59'

Upvotes: 1

Related Questions