2

我有一个表“审计”,其中有一个“描述”列、一个“record_id”列和一个“record_date”列。我只想选择那些描述与两个可能的字符串之一匹配的记录(例如,LIKE "NEW%" 或 LIKE "ARCH%"),其中这两个字符串中的每一个中的 record_id 都相互匹配。然后我需要计算彼此的记录日期之间的天数差异。

例如,我的表可能包含:

id   description    record_id    record_date
1    New Sub        1000         04/14/13
2    Mod            1000         04/14/13
3    Archived       1000         04/15/13
4    New Sub        1001         04/13/13

我只想选择第 1 行和第 3 行,然后计算 4/15 和 4/14 之间的天数,以确定从新记录到存档记录 (1000) 需要多长时间。任何记录都必须同时存在一个新条目和一个存档条目才能计算它(我不在乎那些尚未存档的条目)。这有意义吗?是否可以在 SQL 查询中计算?除了基本的 SQL,我知道的不多。

我正在使用 MySQL Workbench 来执行此操作。

4

2 回答 2

1

以下内容未经测试,但假设任何给定的内容record_id只能通过“新子”和“存档”出现一次,它应该可以工作

select n.id as new_id
      ,a.id as archive_id
      ,record_id
      ,n.record_date as new_date
      ,a.record_date as archive_date
      ,DateDiff(a.record_date, n.record_date) as days_between
  from audit n
  join audit a using(record_id)
 where n.description = 'New Sub'
   and a.description = 'Archieved';

我从 OR 更改为 AND,因为我认为您只需要实际存档的记录之间的天数。

于 2013-05-14T19:45:54.593 回答
0

我的测试是在 SQL Server 中进行的,因此可能需要稍微调整语法(尤其是 DATEDIFF 函数),但您可以从同一个表中选择两次,一侧抓取“新”,另一侧抓取“存档”,然后链接它们通过记录 ID...

SELECT 
    newsub.id, 
    newsub.description, 
    newsub.record_date,
    arc.id, 
    arc.description, 
    arc.record_date,
    DATEDIFF(day, newsub.record_date, arc.record_date) AS DaysBetween
FROM 
    foo1 arc 
    , foo1 newsub
WHERE 
    (newsub.description LIKE 'NEW%') 
    AND 
    (arc.description LIKE 'ARC%')
    AND 
    (newsub.record_id = arc.record_id)
于 2013-05-14T19:47:00.723 回答