这是一个我正在查询的问题,但对我来说感觉非常低效,我希望能帮助构建一个更好的问题。这将进入实时生产环境,db每天处理的查询数量非常高,因此效率越高越好。我有一个表的结构是这样的(剥离只是相关部分):从分组行中的同一列中获取特定值
id | type | datecolumn
1 | A | 2014-01-01
1 | B | 0000-00-00
2 | A | 2014-01-02
2 | B | 2014-01-10
3 | A | 2014-01-01
3 | B | 0000-00-00
总是会有每个ID两行,A型的一个和类型的一个B. A将始终有一个有效的日期,而B将有一个日期> = A的日期,或全部为0。我要的是,这将产生类似输出的查询:
id | date for A | date for B
1 | 2014-01-01 | None
2 | 2014-01-02 | 2014-01-10
3 | 2014-01-01 | None
现在我这样做的方法如下:
SELECT
id,
IF(MIN(datecolumn) > 0, MIN(datecolumn), MAX(datecolumn)) AS 'date for A',
IF(MIN(datecolumn) > 0, MAX(datecolumn), 'None') AS 'date for B'
GROUP BY id
但它确实感觉我应该能够以某种方式按类型摘取日期列值。我知道最简单的解决方案应该是改变表结构,以便每个id只使用一行,但恐怕在这种情况下是不可能的;必须有两排。有没有在这个查询中正确利用类型列的方法?
编辑此外,这是一个将有超过10,000,000行的表上。再一次,效率是关键。
我想这就是我该怎么做的。 – Strawberry