Я использую sqlite3 и пытаюсь получить среднее значение для разных групп. В настоящее время я использую следующий запрос
with data as (
select
t1.Name,
t1.Direction,
t1.Time a,
t2.Time b
from
cart t1 join cart t2 on t1.Time < t2.Time and t1.Name = t2.Name and t1.Direction = t2.Direction)
select Name, Direction, (a+b)/2.0 val from data order by Name, Direction, val
Что выводит следующее:
"Name" "Direction" "val"
"asdf" "w" "1.5"
"asdf" "w" "2.0"
"asdf" "w" "2.5"
"asdf" "z" "3.5"
"asdf" "z" "4.0"
"asdf" "z" "4.5"
"fdas" "w" "7.5"
"fdas" "w" "8.0"
"fdas" "w" "8.5"
"fdas" "z" "5.5"
"fdas" "z" "6.0"
"fdas" "z" "6.5"
С этого момента я хотел бы найти медианное значение всех уникальных пар Имя / Направление.
Ожидаемый результат:
Name Direction Val
asdf w 2.0
asdf z 4.0
fdas w 8.0
fdas z 6.0
Или, если это облегчит задачу, Имя и Направление также можно объединить в один уникальный идентификатор со следующим выводом
Name Val
asdfw 2.0
asdfz 4.0
fdasw 8.0
fdasz 6.0
Исходные данные таблицы следующие:
"Name" "Direction" "Time"
"fdas" "w" "8"
"fdas" "w" "9"
"fdas" "w" "7"
"fdas" "z" "7"
"fdas" "z" "6"
"fdas" "z" "5"
"asdf" "z" "5"
"asdf" "z" "4"
"asdf" "z" "3"
"asdf" "w" "3"
"asdf" "w" "2"
"asdf" "w" "1"
Обновление
Я стал ближе к следующему запросу. Единственная оставшаяся проблема - найти требуемый запрос смещения. В настоящее время я жестко запрограммирован со следующим offset 3
, но мне нужно получить центральный ряд. Я пробовал (select idx from calcs where data2.Name = calcs.Name and data2.Direction = calcs.Direction)
, но затем я получаю эту ошибку no such table: calcs: with data2
.
with data2 as (
with data as (
select
t1.Name,
t1.Direction,
t1.Time a,
t2.Time b
from
cart t1 join cart t2 on t1.Time < t2.Time and t1.Name = t2.Name and t1.Direction = t2.Direction)
select Name, Direction, (a+b)/2.0 c from data order by Name, Direction, c
) select
Name,
Direction,
(select c from
(select c from data2 where data2.Name = calcs.Name and data2.Direction = calcs.Direction
order by c
limit 1
offset 2 ) subset
order by subset.c) tt
from
(select Name, Direction, round(COUNT(*)/2.0) idx from data2 group by Name, Direction) calcs