将SELECT值除以找到的第一个条目

时间:2018-12-06 14:18:26

标签: mysql sql

我对SQL完全没有经验,并且我有一个看起来像这样的表(简化版):

ID | Dataset | date | value

我正在尝试将每个值除以基线,这将是数据库中该特定数据集的第一个条目。

例如,对于数据集1,如果2018年5月5日的值为28,而数据库中的第一个值是2018年1月1日的4,那么我希望结果为28/4。

问题是,并非每个数据集都同时添加到数据库中,因此它们的基线日期不同。因此,如果dataset1在2018年1月1日第一次进入,dataset2可能在2018年2月2日第一次进入。

我将如何处理该查询?我尝试了一个简单的div,但似乎只能将其除以一个数字,而不能按值对表进行除法。

我尝试过这样的事情:

SELECT DATE(date) as time, value, dataset / (
SELECT min(DATE(date)) as time, value, dataset FROM table GROUP BY dataset)
FROM table GROUP BY time, dataset

但是我认为SQL在这种情况下希望分母是单个值,而不是表。

3 个答案:

答案 0 :(得分:3)

检查一下:

SELECT   T1.Date
        ,T1.Value/T2.Value Value
FROM TempTable T1
INNER JOIN   TempTable T2
    ON  T2.Id
        =
        (SELECT   T2.Id
         FROM     TempTable T2
         WHERE    T1.Dataset=T2.Dataset 
         ORDER BY T2.Date 
         LIMIT 1
        )

答案 1 :(得分:1)

“在这种情况下,我认为SQL期望分母是单个值,而不是表。”您处在正确的轨道上,因此子选择需要返回一个值,下面是一个示例:

SELECT
  value, (select value from table b where a.dataset = b.dataset and b.dt = (select min(dt) from table c where b.dataset = c.dataset))
FROM 
  table a

答案 2 :(得分:1)

在MySQL 8+中,您只需执行以下操作:

select t.*,
       t.value / first_value(t.value) over (partition by t.dataset order by t.date) as ratio
from t;