这是表结构和一些示例数据:
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。
如果我运行查询隔离(而不是子查询),它们都可以正常工作。
有什么想法吗?
答案 0 :(得分:0)
此摘要查询将为表的每个值生成表中的第一个(最小)日期。
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从表中提取第一个月的行。我们使用日期算术来进行日期比较。