如果没有相应的结束日期,我将无法确定OBJNR处于特定状态的时间。由于状态仍处于活动状态,结果为“ 0”。我想使用今天的当前日期来计算对象编号处于该状态的时间。请参阅下面的当前结果。
int reverse_convert(int64_t y) {
if (y == 1)
return (1 - y) << 16 - 1; // However, either x = 0 or x = 1 can produce this result.
else
return (1 - y) << 16;
// the condition of y == 0, corresponding to the original "else return 0;", is ignored.
}
预期结果是没有结束日期的地方,我可以使用今天的日期来计算日期差异公式。结果为“ 0”的相应状态中没有相应的结束日期。
当前,这是结果:
convert
答案 0 :(得分:1)
COALESCE
函数可用于将当前日期GETDATE()
替换为空值。也可以使用ISNULL
函数完成此操作,但是COALESCE
是ANSI标准,允许在必要时在更多数据库平台上使用。从您的问题来看,您似乎只想在此列中的所有值均为空时才使用当前日期,因此COALESCE
在MAX
函数之外。如果要用当前日期替换任何空值,则将它们与非空值进行比较,COALESCE
函数将需要放置在MAX
内。
(
SELECT
JCDS_SOGR.OBJNR, JCDS_SOGR.STAT, TJ02T.TXT30, DATEDIFF(DAY,MIN(JCDS_SOGR.UDATE), COALESCE(MAX(JCDS_SOGR.UDATE), GETDATE()))
AS DIF
FROM JCDS_SOGR
JOIN TJ02T ON JCDS_SOGR.STAT = TJ02T.ISTAT
WHERE JCDS_SOGR.OBJNR = 'IE000000000010003791'
AND TJ02T.SPRAS = 'E'
GROUP BY JCDS_SOGR.OBJNR,JCDS_SOGR.STAT,TJ02T.TXT30)
UNION ALL
(
SELECT JCDS_SOGR.OBJNR, JCDS_SOGR.STAT, TJ30T.TXT30, DATEDIFF(DAY,MIN(JCDS_SOGR.UDATE), COALESCE(MAX(JCDS_SOGR.UDATE), GETDATE()))
AS DIF
FROM JCDS_SOGR
JOIN TJ30T ON JCDS_SOGR.STAT = TJ30T.ESTAT
WHERE JCDS_SOGR.OBJNR = 'IE000000000010003791'
AND TJ30T.SPRAS = 'E'
AND TJ30T.MANDT='400'
AND TJ30T.STSMA = 'VEHICLE'
GROUP BY JCDS_SOGR.OBJNR,JCDS_SOGR.STAT,TJ30T.TXT30)
答案 1 :(得分:0)
SELECT COUNT(*) as COUNT, JCDS_SOGR.OBJNR, JCDS_SOGR.STAT, TJ30T.TXT30, DIF =
CASE
WHEN COUNT(*) > 1 THEN DATEDIFF(DAY,MIN(JCDS_SOGR.UDATE),MAX(JCDS_SOGR.UDATE))
WHEN COUNT(*) = 1 THEN DATEDIFF(DAY,MIN(JCDS_SOGR.UDATE),GETDATE())
END
FROM JCDS_SOGR
JOIN TJ30T
ON JCDS_SOGR.STAT = TJ30T.ESTAT
WHERE JCDS_SOGR.OBJNR = 'IE000000000010003137'
AND TJ30T.SPRAS='E'
AND TJ30T.MANDT='400'
AND STSMA = 'VEHICLE'
GROUP BY JCDS_SOGR.OBJNR, JCDS_SOGR.STAT, TJ30T.TXT30