2

「description」列、「record_id」列、「record_date」列を持つ「audit」テーブルがあります。説明が 2 つの可能な文字列 (LIKE "NEW%" OR LIKE "ARCH%" など) のいずれかに一致し、これら 2 つのそれぞれの record_id が互いに一致するレコードのみを選択したいと考えています。次に、互いの record_date 間の日数の差を計算する必要があります。

たとえば、私のテーブルには次のものが含まれている可能性があります。

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

以下はテストされていませんが、「New Sub」と「Archived」で一度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関数)が、同じテーブルから2回選択できます。一方は「新規」を取得し、もう一方は「アーカイブ」を取得してからリンクしますrecord_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 に答える