2012-11-09 72 views
0

我有一个字段样本的数据集,其属性包括:样本名称,分析时间戳(唯一键),分析结果,采样日期和布尔属性'重新运行'描述记录是否是对同一样本进行第二次分析的结果。这意味着可以有多个具有相同样本名称和样本日期的记录,但在这种情况下,第二条记录(rerun = TRUE)是选择的首选结果。PostgreSQL选择记录一个属性与第二个属性的条件评估

名时间戳analysisResult重新运行dateSampled

我试图使用CASE函数,但我想我失去了一些东西简单。我试图把它作为WHERE子句的一个元素,但那不是按原样工作的。

例如,我想是这样的:

SELECT name,analysisResult 
    FROM sciencyTable 
    WHERE date = '12/02/11', 
    AND (some working CASE function) 
    ORDER BY time; 

任何提示,将不胜感激。谢谢。

回答

1

一个解决方案,以您的查询外连接反对重新运行样品和聚结:

select 
    firstruns.name 
, coalesce(reruns.analysisResult, firstruns.analysisResult) as analysisResult 
from 
(select name, dateSampled, analysisResult 
from sciencyTable 
where not rerun 
) as firstruns 
left join 
(select name, dateSampled, analysisResult 
from sciencyTable 
where rerun 
) as reruns 
using (name,dateSampled) 

如果你对给定的名称,日期多次重播,并要挑最新的,你应该尝试windowing functions

+0

谢谢,dbenhur,我会试试看。也感谢链接,现在看看它。干杯。 – damian