各位大牛好!小弟碰到一个问题,困扰了许久,还是没好的解决方案,请大家指点下下。
我想从数据库“消息表”中获取最近几天记录。比如最近4天的记录,我能想到方案如下:
方案一:
  以当天日期为基准,示意sql:select * from message where send_date in(当天,当天-1,当天-2,当天-3);
方案二
  以消息表中最新日期,即Max(send_date)为基准,类似上面的查询。
问题是,send_date并不是连续的,日期之间相差可能为1、2、3等,而且同一天可存在多条记录。
所以简单的以某个日期为基准,加减来推算,肯定是不合理的。
注意表中日期的格式为:YYYY-MM-dd HH:mm:ss,而实际查询的时候,是根据某一天,即格式为YYYY-MM-dd。
我的问题是,如何从表中先查询出最近几天的日期,然后再以此为条件,查询想要的记录。
麻烦大家点拨下下,谢谢!

解决方案 »

  1.   

    where send_date >= start_date AND send_date < (end_date + 1)
    end_date的天数为什么要加1,是因为end_date这一天还有小时,分秒等,所以把日期的天数加1才能得到正确的结果日期在数据库中就是一普通字符串,所以使用>, <等比较符进行比较就可以了
      

  2.   

    select * from message ld where convert(varchar ,send_date,111) in(
    select top 4 * from (
    select distinct convert(varchar ,send_date,111) as sj from message 
    )a order by sj desc)
    此为最近四天的数据,不是以系统时间不起点的,而是以数据表中最近一天为起点的
      

  3.   

    大侠,知道如何用hibernate的hql语句来表达上面的语句吗?