现在有一张表 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,是不是要这样的结果?
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'),现在手上没有数据库没法测试这条语句。。。
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')