gpt4 book ai didi

SQL 查询帮助 : How to evaluate value/max(value) based on some conditions in same query

转载 作者:行者123 更新时间:2023-11-29 13:16:28 24 4
gpt4 key购买 nike

不是 SQL 专家。我正在使用带有 EF 迁移的 postgres 数据库。坚持这个要求。就这样吧。

我的表是这样的:

A   B   C   D

20 1 1 1

59 0 0 1

57 1 1 1

10 1 0 0

30 1 1 1

15 0 0 0

行的顺序是从最旧到最新(从上到下)。

我从我的项目中得到的一半查询如下:

SELECT  dcr."A"
FROM "DCR" dcr
LEFT JOIN "DCM" dcm ON "Id" = dcm."DCRID"
LEFT JOIN "DC" dc ON dc."Id" = dcm."DCID"
WHERE dcr."B" != 0
AND dcr."C" != 0
AND dcr."B" != 0
ORDER BY "UtcDate" desc
limit(1)

这将在匹配条件时获取最新 A 的第一部分值。但不是最大部分和除法部分,如下所述。

我想找到 ((最新的 A,其中 B = C = D = 1 除以 A 在其前几行中的最大值,其中 B = C = D = 1) - 1) * 100 的结果。

我希望这在单个查询中发生,并且有多个这样的组。假设该表包含大约 60 行,我们可以根据其他列对它们进行分组。每组应评估上述公式。

上面例子的预期结果应该是:

result = ((30 / 57) - 1) * 100 = (0.5263 - 1) * 100 = -47.73

最佳答案

您可以使用子查询来获取最大值。我不知道你为什么要用那种奇怪的风格来写查询,但我会保留它:

SELECT  dcr."A" / (SELECT MAX("A")
FROM "DCR"
WHERE dcr."B" != 0
AND dcr."C" != 0
AND dcr."D" != 0)) - 1) * 100
FROM "DCR" dcr
LEFT JOIN "DCM" dcm ON "Id" = dcm."DCRID"
LEFT JOIN "DC" dc ON dc."Id" = dcm."DCID"
WHERE dcr."B" != 0
AND dcr."C" != 0
AND dcr."D" != 0
ORDER BY "UtcDate" desc
limit(1)

关于SQL 查询帮助 : How to evaluate value/max(value) based on some conditions in same query,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48199454/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com