Я не знаю, выбрал ли я соответствующий заголовок для этого вопроса (если нет, пожалуйста, измените его соответствующим образом), но рассмотрите следующую упрощенную структуру таблицы, с которой я работаю:
----------------------------------------------
| date | i | j | k | x | y | z |
----------------------------------------------
| 100209 | 1 | 2 | 3 | 4 | 5 | 6 |
----------------------------------------------
| 100210 | 2 | 3 | 4 | 5 | 6 | 7 |
----------------------------------------------
| 100211 | 0 | 1 | 2 | 3 | 4 | 5 |
----------------------------------------------
| 100212 | 1 | 2 | 3 | 4 | 5 | 6 |
----------------------------------------------
| 100213 | 6 | 5 | 4 | 3 | 2 | 1 |
----------------------------------------------
i
, j
, k
, x
, y
, z
- все это не связанные целые числа / числа с плавающей запятой, все они представляют различные факторы и могут иметь очень разные порядки величины ( i
может варьироваться от 1 до 10, а j
может варьироваться от 100 до 1000 ).
Я пытаюсь выбрать даты, которые соответствуют схожим условиям; При заданном наборе i
, j
, k
, x
, y
, z
мне нужно вернуть все результаты, упорядоченные по близости всех значений как например, , если i = 1
, j = 2
, k = 3
, x = 4
, y = 5
и z = 6
, запрос должен вернуть следующие даты в следующем порядке:
- 100209
- 100212
- 100210
- 100211
- 100213
Я не уверен, относится ли это к вопросу или нет, но некоторые значения (i
, j
, k
) означают чем больше, тем лучше , тогда как другие значения (x
, y
, z
) означают обратное: чем меньше, тем лучше .
Как мне построить такой запрос? Возможно ли это только с помощью SQL?
@ Pentium10:
Я постараюсь ответить на ваш комментарий как можно лучше. Вот образец моих данных:
---------------------------------------------------------------------------------
date | temperature | humidity | pressure | windSpeed | moonDistance
---------------------------------------------------------------------------------
090206 | 7 | 87 | 998.8 | 3 | 363953
---------------------------------------------------------------------------------
...... | ... | ... | .... | ... | ......
---------------------------------------------------------------------------------
100206 | 10 | 86 | 1024 | 2 | 386342
---------------------------------------------------------------------------------
100207 | 9 | 90 | 1015 | 1 | 391750
---------------------------------------------------------------------------------
100208 | 13 | 90 | 1005 | 2 | 396392
---------------------------------------------------------------------------------
100209 | 12 | 89 | 1008 | 2 | 400157
---------------------------------------------------------------------------------
100210 | 11 | 92 | 1007 | 3 | 403012
---------------------------------------------------------------------------------
100211 | 6 | 86 | 1012 | 2 | 404984
---------------------------------------------------------------------------------
100212 | 6 | 61 | 1010 | 3 | 406135
---------------------------------------------------------------------------------
100213 | 7 | 57 | 1010 | 2 | 406542
---------------------------------------------------------------------------------
В моей структуре таблицы больше столбцов и тысяч строк, но, надеюсь, этого будет достаточно, чтобы понять мою точку зрения. Я не собираюсь пытаться упорядочить эти значения, как в предыдущем примере, потому что, возможно, я ошибаюсь, но мне нужно выполнить два типа запросов с этими данными:
- показать мне все даты, упорядоченные по сходству условий, предоставленных мной
- показать мне все даты, упорядоченные по сходству условий, наблюдаемых в дате X
Я понимаю, что второй запрос может быть легко заархивирован с помощью первого, но моя проблема заключается в сортировке по сходству по нескольким столбцам, что я имел в виду ", упорядоченный по близости из все значения в целом". Например, если бы я имел дело только с одним столбцом, было бы намного проще упорядочить по подобию , но моя голова действительно начала вращаться при работе с несколькими столбцами.
Цель состоит в том, чтобы иметь возможность достигать таких результатов:
Сегодня действительно похоже на д / м / гг,
очень похоже на д / м / гг, несколько
аналогично д / м / гг, ...
В моем случае я работаю с погодными и атмосферными данными, но, если это поможет, думаю, вы можете подумать об этой проблеме в терминах employees
(с колонками attendance
, hoursPerWeek
и monthlySalary
) и порядком например, сотрудниками, которые наиболее похожи на attendance = 100%
, hoursPerWeek = 40
и monthlySalary = $5000
.
PS: Теперь, когда я привел этот пример сотрудников, я больше не уверен, можно ли его сравнить с примером погоды, с которым я работаю, так как с таблицей сотрудников Вы можете вычислить (например, rating = monthlySalary / hoursPerWeek * attendance
) и отчасти взвесить столбцы, но я не думаю, что то же самое можно сделать с таблицей погоды - вход оценивается в любом случае .
PS2 : Я не уверен, достаточно ли я выразил себя, если у вас все еще есть сомнения, пожалуйста, дайте мне знать.
Bounty
Некоторые хорошие предложения пока что
Никто из них действительно не решил мою проблему.
Я устанавливаю награду, надеюсь,
собрать еще больше возможных решений
Эта проблема. Спасибо.