【问题标题】:Conditional query in fetching data between two dates with interval在两个日期之间以间隔获取数据的条件查询
【发布时间】:2017-02-03 10:56:27
【问题描述】:

SELECT * FROM mytable WHERE TrackDate 在 DATE_SUB("2015-01-12 13:47:30", INTERVAL 7 DAY) 和 "2015-01-12 13:47:30" 之间

我的表

**id-----------|-----keyword(varchar)----|--------trackdate(timestamp)**

1------------|--------a------------------------|-------2015-01-12 13:47:02
15------------|------ *NULL* ----------------------|-------2015-01-12 12:47:02

2------------|--------b------------------------|-------2015-01-12 10:47:02

3------------|--------c------------------------|--------2015-01-12 1:47:02

4------------|--------d------------------------|-------2015-01-10 13:47:02

5------------|--------e------------------------|-------2015-01-10 10:47:02

6------------|--------f------------------------|-------2015-01-10 1:47:02

7------------|--------g------------------------|--------2015-01-9 13:47:02

8------------|--------h------------------------|--------2015-01-9 10:47:02

9------------|--------i------------------------|--------2015-01-9 1:47:02

10------------|--------j-----------------------|--------2015-01-6 13:47:02

11------------|--------k-----------------------|--------2015-01-5 10:47:02

12------------|--------l-----------------------|--------2015-01-2 1:47:02

我的输出应该是:

1------------|--------a------------------------|-------2015-01-12 13:47:02

4------------|--------d------------------------|-------2015-01-10 13:47:02

7------------|--------g------------------------|--------2015-01-9 13:47:02

10------------|--------j-----------------------|--------2015-01-6 13:47:02

但是我得到了 2015 年 1 月 12 日到 2015 年 1 月 6 日之间的所有数据。 我想从输出中消除重复的日期记录,方法是只获取那些重复日期中最大的日期的记录(比如我消除了 2015 年 1 月 12 日的 id=2,3 并显示 id 1)。 em>

【问题讨论】:

  • 你的"2015-01- 13:47:30"是哪一天?
  • 立即查看@RomanPerekhrest
  • 我猜你的要求是在你的日期范围内为每个不同的日历日检索具有最新时间戳的行。
  • 是的,你是对的@O.Jones,我忘记提到的另一个条件是,如果关键字为空,则选择第二个最新的时间戳。请查看输出和输入中的更新

标签: mysql date max intervals


【解决方案1】:

将派生表与子查询一起使用

select * from mytable where Trackdate IN (
select max(date) from
(
SELECT * FROM mytable WHERE TrackDate between DATE_SUB("2015-01-12 13:47:30", INTERVAL 7 DAY) AND "2015-01- 13:47:30"
)tmp
group by date(trackdate)
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-03
    • 1970-01-01
    相关资源
    最近更新 更多