数据库 求助一个 SQL 问题

bony · 2012年06月20日 · 最后由 ywjno 回复于 2012年06月21日 · 2842 次阅读

现在有一张表 A 有字段: xh(序号),date(日期),flag(有效标志) 1,2012-06-18,1 2,2012-06-18,0 3.. 4.. 5.. 现在想这样取,如果日期相同,则取 flag 为 1 的,如果没有则取 flag 为 0 的。
这个 flag 为 1 的数据是弥补数据,是当发生错误时才会产生用来弥补当期日期的一个记录。

flag 更像是 version。不知道你是取一个日期,还是一组;如果是在 rails 中,取一个日期的话,应该可以在 model 中定义一个 scope,而将日期作为参数传给 scope,并取 version 最新的 (或特定标记的) 即可。

SQL 问题,答非所问,删之。

select xh, date, max(flag) from table group by date,是不是要这样的结果?

#2 楼 @ywjno 有灵感了 谢谢。。

#2 楼 @ywjno 还有一个问题,如果现在又有一个字段叫 number,现在我想取得一段时间内的 number 的和,不如一个月。 如果写成这样的话

select to_char(date,'yyyy-mm'), max(flag),sum(number) from table group by to_char(date,'yyyy-mm')

会把 flag 为 0 的 number 也计算进来,这个怎么去过滤呢?

#4 楼 @bony 貌似需要子查询吧,select to_char(date,'yyyy-mm'), max(flag),sum(number) from (select * form table where flag > 0) group by to_char(date,'yyyy-mm'),现在手上没有数据库没法测试这条语句。。。

#5 楼 @ywjno 这个子查询就会把为 0 的记录过滤掉了,现在是需要有 1 的时候统计 1,没有 1 的时候统计 0。我尝试用 case when 也不行。
纠结死我了,这个还是一个存储过程,只能用 sql,用程序早都搞定了。

#6 楼 @bony 我怎么觉得应该是先检索得到正确的数据,然后再统计这些数据的 sum 才对呢,

select to_char(date,'yyyy-mm'), sum(number) from (select date, max(flag), number from table group by date) tab group by to_char(date,'yyyy-mm')
需要 登录 后方可回复, 如果你还没有账号请 注册新账号