【问题标题】:SQL Server query - interval values maximizing a SUMSQL Server 查询 - 最大化 SUM 的间隔值
【发布时间】:2019-05-12 10:55:16
【问题描述】:

我需要一个 SQL Server 查询,它返回对应于一个十进制字段的两个值(t1 和 t2),以便它们定义某个 SUM 最大化的间隔。对成功的记录(字段结果 > 0)和不成功的记录(字段结果

更多信息

-table“操作”是目标SQL表,这些查询会涉及到相关字段: SELECT t from operations where result > 0

SELECT COUNT(*) AS num from operations where result > 0

-字段“t”是十进制值,我正在搜索“t”的2个值,例如“t1=1.25”和“t2=2.6”

-字段“结果”是一个整数值,可以是> 0(它获胜,例如“15”)或

-以下查询可以正常返回任意确定为 t > 1 和 t SELECT DISTINCT (select MIN(t) from operations where t > 1) As t1, (select MAX(t) from operations where t < 1.5) As t2 from operations 客观的: -table "operations" 有大约 500 条记录,其中一些是成功的 ("result" > 0) 或不成功的 ("result" t1 和 t

+------------+-------------+
| t          | result      |
+------------+-------------+
| 1.25       |          15 |
| 1.1        |         -12 |
| 3.8        |          10 |
+------------+-------------+

对于这个小记录集,t 的预期值为 t1=1.25 和 t2=3.8,因为在区间 1.25

【问题讨论】:

  • 请在问题中以 text 表格的形式提供示例数据和所需结果。
  • 即使有“更多信息”,我仍然不知道你在问什么。阅读本文并尝试再次编辑您的问题:spaghettidba.com/2015/04/24/…
  • 我设法添加了带有小记录集的表;)

标签: sql sql-server count max


【解决方案1】:

如果您获得按结果排序的前 2 个,并包含 ROW_NUMBER。
然后根据row_number你可以知道t1和t2。

SELECT 
MAX(case when rn = 1 then t end) as t1, 
MAX(case when rn = 2 then t end) as t2, 
MAX(case when rn = 1 then result end) as result1, 
MAX(case when rn = 2 then result end) as result2,
SUM(result) as optimum
FROM
(
  SELECT result, t, ROW_NUMBER() OVER (ORDER BY t) as rn
  FROM
  (
    SELECT TOP 2 result, t
    FROM operations
    WHERE t BETWEEN 1.00 AND 4.00
    ORDER BY result DESC
  ) q1
) q2;

结果:

t1      t2      result1 result2 optimum
1.25    3.80    15      10      25

【讨论】:

  • 感谢 LukStorms,但您的查询是否将 RESULTS 视为 t1
  • 我现在在 q1 子查询中添加了一个关于 t 的示例限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 1970-01-01
  • 2012-08-23
  • 1970-01-01
  • 2015-04-12
  • 1970-01-01
相关资源
最近更新 更多