计算值随时间的变化?

时间:2010-10-25 11:46:29

标签: mysql time count distinct

我仍然坚持在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

可能?

3 个答案:

答案 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。我希望这会有所帮助。