【发布时间】:2015-12-02 19:15:55
【问题描述】:
我有一个数据库查询问题。
我的 USER 表设置是这样的..
Id | PIN | biz_id | active_ind
--- | ---------------------------
1 | 123 | NULL | Y
2 | 456 | 1 | Y
3 | 789 | NULL | N
4 | 012 | 2 | Y
而我的 USER_PURCHASE 表是这样的
id user_id date amount
---|----------|------------|--------|
1 | 1 | 2014-04-03 | 5 |
2 | 2 | 2015-03-04 | 5 |
5 | 3 | 2014-04-03 | 6 |
3 | 4 | 2015-03-03 | 6 |
4 | 2 | 2015-03-04 | 7 |
6 | 3 | 2013-03-03 | 7 |
7 | 4 | 2013-12-24 | 8 |
8 | 4 | 2013-01-01 | 8 |
我正在尝试编写一个查询,该查询将为过去 13 个月内未进行购买的 ACTIVE 用户返回 user.id、user.pin、user_purchase.date。
我尝试编写如下查询:
SELECT max( date ) AS mdate, `user_id` , `users`.`pin`
FROM `users_purchases`
INNER JOIN `users` ON `users_purchases`.`user_id` = `users`.`id`
WHERE `users`.`active_ind` = 'Y'
AND `users`.`biz_id` = NULL
GROUP BY `users`.`pin`
HAVING mdate < DATE_SUB( CURDATE( ) , INTERVAL 13
MONTH )
但我怀疑这不是正确的做法。
有人可以帮忙吗?最重要的是解释为什么正确的做法实际上是正确的 - 我真的很想理解这一点。谢谢!
【问题讨论】:
-
您的日期字段是日期还是字符串?因为字符串应该是ansi格式
yyyy-mm-dd -
是的,日期是正确的时间戳。只是匆匆写下。现在将进行更改。
-
为什么你有
users.biz_id = NULL?? -
因为有些客户隶属于企业,而另一些客户则没有..
-
您能否提供您的预期结果以及您现在的结果。在我看来你的查询没问题。
标签: mysql sql select join greatest-n-per-group