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;

但它比 10/2012 少了几个月和一年。

如果我单独运行查询(而不是子查询),它们都可以正常工作。

有任何想法吗?

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)

第二个查询的技巧是使用 JOIN 从表中提取第一个月的行。我们使用日期算术来进行日期比较。

于 2013-04-09T23:12:56.013 回答