【问题标题】:Querying data for current day and only the most recent entry查询当天的数据,仅查询最近的条目
【发布时间】:2013-12-04 16:55:57
【问题描述】:

我是 Informix 的新手,正在尝试找出一些语法。我有一个存储代理状态信息的表。我只想从桌子上拉两样东西;

1 - 当天的行数

2 - 只有每个代理的最新条目

所以,一个查询

select limit 5 agentid, eventdatetime from agentstatedetail order by eventdatetime desc

将产生;

+------------+------------------------+
| agentid    | eventdatetime          |
+------------+------------------------+
| 1552       | 2013-12-04 16:48:20.122|
| 1482       | 2013-12-04 16:48:18.897|
| 1439       | 2013-12-04 16:48:17.754|
| 1188       | 2013-12-04 16:48:15.972|
| 788        | 2013-12-04 16:48:15.190|
+------------+------------------------+

Informix 语法似乎与 mysql 有点不同。我怎样才能提取这种信息?我尝试使用“今天”修饰符,但它并没有像我想象的那样工作。

【问题讨论】:

    标签: sql informix


    【解决方案1】:

    您可以获得今天有一行的每个 agentid 的最大事件日期时间:

    SELECT agentid,max(eventdatetime)
    FROM agentstatedetail 
    WHERE date(eventdatetime) = TODAY
    GROUP BY agentid;
    

    附言要在 informix 中获得与 LIMIT 5 相同的效果,请执行 SELECT FIRST 5 ...

    【讨论】:

    • 这很好,但如果查询从agentstatedetail返回更多字段,它将不起作用。
    • 我并没有真正遵循您的思路。你觉得哪一部分不行?
    • 例如,我们需要在agentstatedetail表中返回agentName。
    • 那是真的,但这不是问题所在。这是完成所要求的最有效的方法。我觉得你想多了。
    • 并不是想太多。我只是想要一个解决方案,以防查询也返回其他字段。好点了吗?
    【解决方案2】:

    希望这项工作:

    select A.agentid, A.eventdatetime 
    from agentstatedetail A
    where 
    date(A.eventdatetime) = TODAY
    and A.eventdatetime = ( select MAX(B.eventdatetime) from agentstatedetail B where A.agentid = B.agentid)
    

    【讨论】:

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