如何返回多列的最大值(日期和费用关系)?
TableName [ID, Date1, Cost1, Date2, Cost2, Date3, Cost3]
我需要返回这样的内容:[ID,最近日期,费用]
我需要返回这样的内容:
我需要使用另一个表 - BackupTableName:
...并在TableName的Cost1,Cost2和Cost3为空时使用其'数据。
答案 0 :(得分:2)
SELECT ID,
CASE
WHEN Date1>Date2 AND Date1>Date3 THEN Date1
WHEN Date2>Date1 AND Date2>Date3 THEN Date2
ELSE Date3
END AS "Most Recent Date",
CASE
WHEN Date1>Date2 AND Date1>Date3 THEN Cost1
WHEN Date2>Date1 AND Date2>Date3 THEN Cost2
ELSE Cost3
END AS Cost
FROM TableName;
'Date1'...'Date2'...'Date3'是一种架构气味。考虑规范化为单独的多对一表。
ETA:
在TableName的Cost1,Cost2和Cost3为空的情况下。
你也有空吗?好吧,这真的很不愉快。您需要防止空值,例如:
CASE
WHEN Date1>COALESCE(Date2, 0) AND Date1>COALESCE(Date3, 0) THEN Date1
WHEN Date2>COALESCE(Date1, 0) AND Date2>COALESCE(Date3, 0) THEN Date2
ELSE Date3
END AS "Most Recent Date",
(在日期选择位和成本选择位中。这假设成本通常总是高于0。)
我需要使用另一个表:BackupTableName [ID,Date1,Cost1,Date2,Cost2,Date3,Cost3]并使用其数据
嗯......这是可能的,但你的模型现在看起来非常不稳定。
SELECT t0.ID,
CASE
WHEN t0.Date1>COALESCE(t0.Date2, 0) AND t0.Date1>COALESCE(t0.Date3, 0) THEN t0.Date1
WHEN t0.Date2>COALESCE(t0.Date1, 0) AND t0.Date2>COALESCE(t0.Date3, 0) THEN t0.Date2
WHEN t0.Date3>COALESCE(t0.Date1, 0) AND t0.Date3>COALESCE(t0.Date1, 0) THEN t0.Date3
WHEN t1.Date1>COALESCE(t1.Date2, 0) AND t1.Date1>COALESCE(t1.Date3, 0) THEN t1.Date1
WHEN t1.Date2>COALESCE(t1.Date1, 0) AND t1.Date2>COALESCE(t1.Date3, 0) THEN t1.Date2
WHEN t1.Date3>COALESCE(t1.Date1, 0) AND t1.Date3>COALESCE(t1.Date1, 0) THEN t1.Date3
END AS "Most Recent Date",
-- the same thing all over again for the cost selector
FROM TableName AS t0
LEFT JOIN BackupTableName AS t1 ON t0.ID=t1.ID;
如果它完全在您的权力范围内,您需要normalise这些表,因为您目前拥有的数据模型基本上已被破坏。
答案 1 :(得分:0)
如果您的数据库支持,您可以使用greatest
功能
select ID, greatest(Date1, Date2, Date3) as recent_date,
greatest(Cost1, Cost2, Cost3) as priceless from Table