我有一个Mysql查询,它给出了我下面提到的输出:
输出:
ID Date T1 T2
A-12 2017-01-01 15:05:20 -3 3
A-12 2017-01-01 15:05:20 -2 5
A-14 2017-01-01 15:05:20 6 -2
A-14 2017-01-01 15:05:20 8 12
A-15 2017-01-01 15:05:20 10 9
A-15 2017-01-01 15:05:20 13 15
A-17 2017-01-01 15:05:20 19 18
我只希望那些具有最小值的行(与ID
不同)具有与T1
和T2
值相对于每个ID
的值,另外三列是{{1 }}和Range
以及Minimum
。
范围:Count
,-5to5
,5to10
和10to15
必需输出:
15to20
我的查询是:
ID Date T1 T2 Range Minimum Count
A-12 2017-01-01 15:05:20 -3 3 -5to5 -3 2
A-14 2017-01-01 15:05:20 4 -2 -5to5 -2 2
A-15 2017-01-01 15:05:20 9 10 5to10 9 2
A-17 2017-01-01 15:05:20 18 19 15to20 18 1
答案 0 :(得分:2)
嗯。这在MySQL中有点复杂
SELECT t1.ID, t1.Date, t2.T1, t2.T2,
CONCAT(t2.T1, 'to', t2.t2) as range,
t2.T1 as minimum
FROM Table1 t1 LEFT JOIN
Table2 t2
ON t1.re = t2.re
WHERE t1.Date >= '2017-01-01' AND
(T1.ID, t2.T1) IN (SELECT tt1.ID, MIN(tt2.Ti)
FROM Table1 tt1 JOIN
Table2 tt2
ON tt1.re = tt2.re
WHERE t1.Date >= '2017-01-01'
GROUP BY tt1.ID
);
答案 1 :(得分:1)
在R中,一旦您连接到数据库(例如使用DBI
),就可以使用dplyr
包执行以下操作。
library(dplyr)
breaks <- c(-Inf, -5, 5, 10, 15, 20, Inf)
labels <- c('-Infto-5','-5to5','5to10','10to15', '15to20', '20toInf')
df %>% group_by(ID) %>%
mutate(Minimum = min(T1,T2)) %>%
mutate(Range = cut(Minimum, breaks = breaks, labels = labels)) %>%
mutate(Count = n()) %>%
filter(T1 == Minimum | T2 == Minimum)