我有一个返回数据集的查询,该数据集返回两年不同的结果。每个位置id恰好有两行(不一定按顺序):
+------+---------------------------------------+ | year | location_id | unique_1 | data +------+---------------------------------------+ | 1990 | 100 | 343 | 100 | 2000 | 100 | 343 | 200 | 1990 | 55 | 111 | 50 | 2000 | 55 | 111 | 60
我想获取每年的结果,并从较晚年份的数据列中减去前一年的数据列。
像这样的东西(如果这实际上是有效的MySQL语法,它将返回100),但它需要适用于所有行:
(SELECT data FROM TABLE
WHERE year = 2000
AND location_id = 100
AND unique_1 = 343 )
MINUS
(SELECT data FROM TABLE
WHERE year = 1990
AND location_id = 100
AND unique_1 = 343 )
答案 0 :(得分:2)
如果您保证同一location_id
只有两行,您可以这样做:
select
a.location_id
, b.data - a.data
from test a
join test b on a.location_id=b.location_id and a.data>b.data
此查询可确保具有相同位置ID的两行以这样的方式连接在一起,即data
侧较小的a
位于b
侧,而b
位于GET index_5589b14f3004fb6be70e4724/document_set/382.txt/_termvector
{
"fields" : ["plain_text", "pdf_text"],
"term_statistics" : true,
"field_statistics" : true
}
侧 ...
"advis": { //porter stemmed version of the word "advising"
"doc_freq": 1,
"ttf": 1,
"term_freq": 1,
"tokens": [
{
"position": 81,
"start_offset": 412,
"end_offset": 420
}
]
},...
"air": {
方面。
答案 1 :(得分:1)
您可以使用条件聚合执行此操作:
select t.location_id,
max(case when t.year = 2000 then data
when t.year = 1999 then - data
end) as diff
from table t
group by t.location_id;
答案 2 :(得分:1)
使用join连接表的两个实例,并添加一个减法列:
select first.location_id, first.unique_1, first.data - second.data as result
from (SELECT data FROM TABLE WHERE year = 2000) as first join
(SELECT data FROM TABLE WHERE year = 1990) as second on first.location_id =
second.location_id and first.unique_1 = second.unique_1