我正在尝试让sql查询计数 personid
本月唯一的,是一个'返回'的访客,除非他们有'新'的记录,以及当月。
month | personid | visitstat
---------------------------------
January john new
January john returning
January Bill returning
因此,我要查找的查询应该为每个具有“returning”的惟一personid获取一个计数,除非该personid也存在一个“new”——在本例中返回一个 count
为1 January Bill returning
因为约翰这个月是新来的。
我试过的问题是 SELECT COUNT(distinct personid) as count FROM visit_info WHERE visitstat = 'Returning' GROUP BY MONTH(date) ORDER BY date
不幸的是,即使这个人在那个月有一个“新”的记录,这也算作“返回”。
提前谢谢,希望我解释得足够清楚。
sql数据库映像
数据图表
2条答案
按热度按时间nqwrtyyt1#
我还面临着与处理数据库时相同的情况之一。可能的方法是使用GROUPBY with having子句和子查询。
js4nwp542#
你已经自己写了“存在”这个词了。你可以用这个,一个
NOT EXISTS
以及相关子查询。我还建议将年份包括在
GROUP BY
表达式,否则当数据跨越一年以上时可能会得到意外的结果。也只能使用包含在GROUP BY
子句中的聚合函数ORDER BY
条款。mysql,实际上与任何其他dbms相反,可能会接受它,但也可能产生奇怪的结果。