开发者社区> 问答> 正文

求写一个比较复杂的SQL:报错

  这是12月的日历。(前三天和后几天并不属于本月)求一个sql,查询出当月的事件。 事件开始时间start(timestamp),事件结束时间end(timestamp),需要查询出当月和前后那几天里发生的事件(开始到结束之间的任意时间都有效)。

展开
收起
kun坤 2020-06-09 13:49:53 463 0
1 条回答
写回答
取消 提交回答
  • // start<=范围开始时间 and end>=范围开始时间 :以前就有,范围内死或者一直持续         // start>=范围开始时间 and start<=范围结束时间 :范围内生,范围内死或者一直持续

            return execute(select(CalendarEvent.class, null, new String[] {                 "userId=?",                 "((start<=? and end>=?) || (start>=? and start<=?))" }),                 new Object[] { userId, start, start, start, end },                 ResultSetHandlerFactory.CALENDAREVENT_LIST_HANDLER);######开始和结束时间明天看吧,应该可以用java计算出来######你的意思要查询日历中11月28到1月1日之间的事件么?如果是,下面的语句可以算出开始日和结束日,可以把他们放到语句中作为时间限定条件

    select SUBDATE(now(), (weekday(subdate(now(), day(now())-1)) + day(now()))); select adddate(last_day(now()),(5 - weekday(last_day(now()))));######挺好的,就是想尽量不给数据库太多的压力。因为前面已经给了不少的压力了。######

    引用来自#4楼“antonie”的帖子

    你的意思要查询日历中11月28到1月1日之间的事件么?如果是,下面的语句可以算出开始日和结束日,可以把他们放到语句中作为时间限定条件 select SUBDATE(now(), (weekday(subdate(now(), day(now())-1)) + day(now()))); select adddate(last_day(now()),(5 - weekday(last_day(now()))));

     最后使用了JAVA计算: http://www.oschina.net/code/snippet_2765_2063######如果在 sql 中带上一些"函数", 很可能会让mysql 认为此 sql 无法缓存. 如果此SQL执行比较多的话,可以考虑其它的优化方式. 并不是SQL的查询次数多,mysql 压力就会大. 要综合应用环境,缓存和IO.######

    引用来自#6楼“杨焱”的帖子

    引用来自#4楼“antonie”的帖子

    你的意思要查询日历中11月28到1月1日之间的事件么?如果是,下面的语句可以算出开始日和结束日,可以把他们放到语句中作为时间限定条件 select SUBDATE(now(), (weekday(subdate(now(), day(now())-1)) + day(now()))); select adddate(last_day(now()),(5 - weekday(last_day(now()))));  最后使用了JAVA计算: http://www.oschina.net/code/snippet_2765_2063 性能是一个要考虑的问题,具体求值算法应该都差不太多,这个问题如果我设计的话,在字典表里设置日历起始日和日历结束日,每月第一天算一次,其他应用时都从字典表里直接取值使用,仅供参考,有什么好想法大家继续。
    2020-06-09 13:49:59
    赞同 展开评论 打赏
问答分类:
SQL
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载