【问题标题】:How do I get the most recent database entry per ID, per day?如何每天获取每个 ID 的最新数据库条目?
【发布时间】:2014-08-18 17:21:45
【问题描述】:

我正在尝试每天从数据库表中提取每个 Id 的最新条目,其中数据库使用 Sybase SQL,编写查询的报告语言是 Oracle SQL。我已经尝试在本网站其他地方发布的 SQL 代码之后对查询进行建模,但它会提取除 max() 之外的其他日期和时间值。我怀疑原因是我使用的某些字段是通过转换或字符串处理获得的。

这里是查询:

Select
    substring(x.Id, 1, datalength(x.Id) - datalength(x.TimeAndAction)) as 'Identification',
    x.City,
    x.Date,
    max (Convert(Varchar(15), x.UTCTime, 108)) as 'MaxTime'
        from db_table x
            where x.Date >= 20140401 
            and x.Date <= 20140403
            and x.City in ('LONDON', 'NEW_YORK', 'SHANGHAI', 'TOKYO')
            group by x.Id, x.City, x.Date

(注意:Id 包含 Location 作为其字符串的一部分)

问题是查询的输出中也包含最近的时间(即不需要的数据)。我该如何解决这个问题?

【问题讨论】:

  • 数据库是 Sybase SQL 并且编写查询的报告语言是 Oracle SQL”没有任何意义。您不能在 Sybase 数据库上运行 Oracle SQL。你真正使用的是什么?甲骨文还是赛贝斯?您问题中的 SQL 绝对不适用于 Oracle。
  • 查询在 Sybase DB 上。所以我会使用 Sybase。
  • Sybase 拥有 3 个具有不同语法/功能的数据库(ASE、ASA、IQ);)

标签: sql sybase string-parsing


【解决方案1】:

问题在于 GROUP BY 是基于 Id 的,这是一个字段,数据库中的每个值都是唯一的。我替换的时候出现了正确的结果

group by x.Id

group by substring(x.Id, 1, datalength(x.Id) - datalength(x.TimeAndAction))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 1970-01-01
    • 2015-06-04
    • 2015-11-07
    • 1970-01-01
    • 2016-11-17
    相关资源
    最近更新 更多