2017-01-13 19 views
0

私は書き込みしようとしているクエリの入力パラメータを持っています。基本的にはif mostRecentSnapshot == trueですが、実行したプロセス(基本的にはwhere max(creationDate))とif mostRecentSnapshot == falseから最新のレコードのみを選択し、次にselect creationDateと通常の列を選択します。入力パラメータに基づいたクエリテーブル

私にはfrom句にifというステートメントがありますが、それは可能だとは思いません。通常はCTEを使用しますが、それらはMySQLには存在しません。

これを達成する最も良い方法は何ですか?

それはこの線に沿って何かのようになります。

SELECT 
CASE mostRecentSnapshot WHEN FALSE THEN 
(
processauditheader.creationDate as processCreationDate, 
processauditheader.processName, 
processauditheader.processType, 
processauditheader.processHost, 
processauditheader.processDatabase, 
processauditheader.tableAudited, 
processauditheader.processInvokedByName, 
processauditheader.processInvokedByType, 
processauditheader.processInvokedByDatabase, 
processauditheader.processIntervalValue, 
processauditheader.processIntervalField, 
processauditheader.auditScenarios, 
processaudititerationdetail.creationDate as iterationDate, 
processaudititerationdetail.connectionId, 
processaudititerationdetail.processDate, 
processaudititerationdetail.tableRowCount, 
processaudititerationdetail.tableRowCountLastDay, 
processaudititerationdetail.previousProcessAuditIterationDetailID, 
processauditmetricdetail.creationDate, 
processauditmetricdetail.processAuditIterationDetailID, 
processauditmetricdetail.auditMetric, 
processauditmetricdetail.auditTotal, 
processauditmetricdetail.auditExample 
) 
WHEN TRUE THEN 
(
((SELECT MAX(processaudititerationdetail.creationDate) as maxSnapshot, 
processaudititerationdetail.id 
from reporting_audit.processaudititerationdetail 
group by processaudititerationdetail.creationDate) mostRecent 

JOIN reporting_audit.processaudititerationdetail ON mostRecent.id = processaudititerationdetail.id) 
) 
END 

FROM reporting_audit.processauditheader 

JOIN processaudititerationdetail ON processaudititerationdetail.processAuditHeaderID = processauditheader.id 
LEFT JOIN processauditmetricdetail ON processauditmetricdetail.processAuditIterationDetailID = processaudititerationdetail.id 

答えて

1

クエリは列のみの固定セットを返すことができます。おそらく、次は何をしたいん:

select paid.* 
from reporting_audit.processaudititerationdetail paid 
where (not v_mostRecentSnapshot) or 
     paid.creation_date = (select max(paid2.creationDate from reporting_audit.processaudititerationdetail paid2); 

それはテーブルからすべてのレコードを選択するか、creationDate最新のを持っている唯一のレコード(複数可)のいずれかになります。

+0

は、ここに私が思い付いたものです:。。。 '' '選択ヘッダ*、反復*、メトリック* reporting_audit.processauditheaderヘッダ からiteration.processAuditHeaderID = header.id にprocessaudititerationdetail反復に参加processauditmetricdetailメトリックに参加左metric.processAuditIterationDetailID = iteration.id ここで(not @ mostRecentSnapshot)または iteration.processAuditHeaderId) '' ' – Ted

関連する問題