У меня есть таблица с указателями имени и четыре столбца, в которых хранятся данные ежемесячно. Теперь я хочу проанализировать данные. Сначала я сравнил некоторые значения примерно за год (13 месяцев) и обнаружил, что мне даже нужно последнее изменение значения столбца, чтобы решить, какой результат должен быть получен (что усложняет ситуацию).
Здесь команда SQL на один год и часть набора результатов:
SELECT e.* FROM indicators AS e ORDER BY e.date DESC LIMIT 13
date interest_rate inflation_rate exchange_rate
"2018-04-02" 0.0 1.1 1.2321
[...]
"2017-04-03" 0.0 2.0 1.0691
Проблема возникла, когда я обнаружил, что столбец intrest_rate не имеет последнего значения изменения в наборе результатов. Посмотрев внутри stackoverflow, я пришел к следующей команде SQL:
SELECT c.* FROM indicators AS c WHERE (c.date >=
( SELECT b.date FROM indicators AS b WHERE b.interest_rate <>
( SELECT a.interest_rate FROM indicators AS a WHERE b.date < a.date ORDER BY a.date DESC LIMIT 1 )
ORDER BY b.date DESC LIMIT 1 )
)
date interest_rate inflation_rate exchange_rate
"2016-03-01" 0.05 0.3 1.0888
"2016-04-01" 0.0 -0.2 1.1385
[...]
"2017-04-03" 0.0 2.0 1.0691
Проблема в том, что есть два запроса, в которых должна быть найдена правильная дата. На данный момент дата 1 марта 2016 года.
После игры arround с min (), max (), LEFT JOIN и т. Д. Я прихожу к решению с помощью UNION.
SELECT result1.* FROM
( SELECT c.* FROM indicators AS c WHERE (c.date >=
( SELECT b.date FROM indicators AS b WHERE b.interest_rate <>
( SELECT a.interest_rate FROM indicators AS a WHERE b.date < a.date ORDER BY a.date DESC LIMIT 1 )
ORDER BY b.date DESC LIMIT 1 )
)
) AS result1
UNION
SELECT result2.* FROM ( SELECT e.* FROM indicators AS e ORDER BY e.date DESC LIMIT 13) AS result2
Если ищет меня, то это решение будет работать, если изменение ставки будет за пределами 13 месяцев. Будет ли результат корректным, если изменение интереса в течение 13 месяцев? У меня там может быть более простое решение?
РЕДАКТИРОВАТЬ: Есть система очков.
Если уровень инфляции ниже уровня инфляции за один год - одно очко
Если обменный курс ниже, чем обменный курс за один год - одно очко.
Была ли последняя процентная ставка снижена - один балл.
Вот полный результат, который до первого изменения процентной ставки:
date intr_r infl_r exchange_rate
"2016-03-01" "0.05" "0.3" "1.0888"
"2016-04-01" "0.0" "-0.2" "1.1385"
"2016-05-02" "0.0" "0.0" "1.1403"
"2016-06-01" "0.0" "-0.2" "1.1154"
"2016-07-01" "0.0" "-0.1" "1.1102"
"2016-08-01" "0.0" "0.1" "1.1113"
"2016-09-01" "0.0" "0.2" "1.1132"
"2016-10-04" "0.0" "0.2" "1.1161"
"2016-11-01" "0.0" "0.4" "1.0946"
"2016-12-01" "0.0" "0.5" "1.0635"
"2017-01-02" "0.0" "0.6" "1.0541"
"2017-02-01" "0.0" "1.1" "1.0755"
"2017-03-01" "0.0" "1.8" "1.0597"
"2017-04-03" "0.0" "2.0" "1.0691"
"2017-05-02" "0.0" "1.5" "1.093"
"2017-06-01" "0.0" "1.9" "1.1221"
"2017-07-03" "0.0" "1.4" "1.1412"
"2017-08-01" "0.0" "1.3" "1.1727"
"2017-09-01" "0.0" "1.3" "1.1825"
"2017-10-02" "0.0" "1.5" "1.1806"
"2017-11-01" "0.0" "1.5" "1.1638"
"2017-12-01" "0.0" "1.4" "1.1849"
"2018-01-02" "0.0" "1.5" "1.1993"
"2018-02-01" "0.0" "1.4" "1.2457"
"2018-03-01" "0.0" "1.3" "1.2214"
"2018-04-02" "0.0" "1.1" "1.2321"
Я хотел рассчитать баллы как показатель для инвестиций.