我仍然坚持在MySQL中计算一些东西。数据库结构远不是SOers的最佳调用,但是我在这里没有影响,必须忍受它。可能这也是我再次需要帮助以获取一些信息的原因之一:)
假设我有: some_id(不是表格的PK,不是唯一的), 年,月(没有日期字段只有两个整数字段), some_flag(A或B字符)。
现在我想知道some_flag改变的频率(在给定的时间跨度内)。在第一种方法中,时间跨度并不是非常重要,我只需要知道发生了多少变化。请注意,更改只能每月进行一次。我的问题:
SELECT some_id,year,some_flag FROM mytable
WHERE some_flag = "A" OR someflag = "B"
AND year > 2005
GROUP BY some_id,some_flag
HAVING COUNT(DISTINCT some_flag) > 1
返回一个空结果集。它出什么问题了?我相信国旗有几年的变化......
不像
select .... , sum(case when month=month-1 and some_flag != some_flag then 1 else 0 end) as changecount
可能?
答案 0 :(得分:2)
试试这个:
SELECT some_flag, COUNT(some_id) FROM mytable
WHERE some_flag = "A" OR someflag = "B"
AND year > 2005
GROUP BY some_flag
HAVING COUNT(some_id) > 1
<强> - 编辑 - 强>
如果你想看一个月的月数,试试这个:
(注意:它只显示已经改变的月份)
SELECT some_flag, year, month, COUNT(some_id) FROM mytable
WHERE some_flag = "A" OR someflag = "B"
AND year > 2005
GROUP BY some_flag, month, year
HAVING COUNT(some_id) > 1
答案 1 :(得分:2)
在我看来,你需要分两部分来做这件事。
首先,执行此SQL查询以获取some_id, some_flag
的所有值:
SELECT some_id, some_flag, year, month
FROM ...
WHERE year > 2005
ORDER BY some_id, some_flag, year, month
然后,通过匹配/合并过程运行输出,以检测给定some_flag
的{{1}}何时更改。保存some_id
在匹配/合并过程中更改报告的年份和月份。
答案 2 :(得分:0)
按some_flag
分组时,您COUNT(DISTINCT some_flag)
始终为1。
仅通过some_id
尝试gouping。我希望这会有所帮助。