0

テーブル構造といくつかのサンプル データを次に示します。

pID.....month.....year

27 .....3    .....2008

27 .....12   .....2012

31 .....6    .....2008

99 .....1    .....2006

42 .....1    .....2009

pID は practiceID で、月と年はデータを入力した期間を表します。2012 年 10 月、2012 年 11 月、2012 年 12 月などに初めてデータを入力したプラクティスの数を取得する必要があります。2012 年 10 月に次のクエリを試しました。

SELECT *
FROM
    IPIPKDIS
where
    practiceID NOT IN (
         SELECT practiceID
         from
             IPIPKDIS
         where
             year < 2012 and month < 10
    )
    and year = 2012
    and month = 10
    and measureCatRecID = 2
ORDER BY year, month;

しかし、それは2012年10月よりも少ない月と年をつかんでいます。

クエリを分離して (サブクエリとしてではなく) 実行すると、両方とも正常に動作します。

何か案は?

4

1 に答える 1

0

この要約クエリは、practiceID の各値について、テーブル内の最初の (最小の) 日付を返します。

SELECT practiceID,
       MIN(STR_TO_DATE( CONCAT(year, ' ', month), '%Y %m')) first_date 
  FROM IPIPKDIS 
 GROUP BY practiceID

最初に報告された月の行全体を取得する場合は、次のようにネストされたクエリを実行します。

SELECT *
  FROM IPIPKDIS I
  JOIN (
    SELECT practiceID,
           MIN(STR_TO_DATE( CONCAT(year, ' ', month), '%Y %m')) first_date 
      FROM IPIPKDIS 
     GROUP BY practiceID
       ) first ON (    first.practiceID = I.practiceID 
               AND STR_TO_DATE( CONCAT(I.year, ' ', I.month), '%Y %m') = first.first_date)

2 番目のクエリの秘訣は、JOIN を使用してテーブルから最初の月の行だけを抽出することです。日付演算を使用して日付の比較を行います。

于 2013-04-09T23:12:56.013 に答える