2014-01-03 2 views
0

Я ищу функцию, которая возвращает наибольшее числовое число, отличное от таблицы.MySQL запрос преобладающее нечисловое значение

В моей таблице базы данных хранятся записи с метеостанции. Многие из них являются числовыми, но направление ветра записывается как одно из 16 значений текста - N, NNE, NE, ENE, E ... и т. Д. В поле varchar. Записи добавляются каждые 15 минут, поэтому 95 строк представляют дневную погоду.

Я пытаюсь вычислить преобладающее направление ветра в течение дня. Вручную добавьте количество Ns, NNE, NE и т. Д. И посмотрите, какие из них больше всего.

Имеет ли MySQL хороший способ сделать это?

Благодаря

+0

Вы могли бы определить направления ветров, как перечисление - поэтому в бэкэнд снова есть целое число. – frlan

ответ

0

Это трудно ответить на ваш вопрос, не видя ваша схема, но это должно помочь вам.

Предполагая, что направления ветров сохраняется в том же столбце, что числовые значения, которые вы хотите игнорировать, вы можете использовать REGEXP игнорировать числовые значения, например:

select generic_string, count(*) 
from your_table 
where day = '2014-01-01' 
and generic_string not regexp '^[0-9]*$' 
group by generic_string 
order by count(*) desc 
limit 1 

Если направление ветра единственным хранящийся в колонке, тогда это немного проще:

select wind_direction, count(*) 
from your_table 
where day = '2014-01-01' 
group by wind_direction 
order by count(*) desc 
limit 1 

Вы можете сделать это в течение нескольких дней, используя подзапросы. Например (если у вас нет каких-либо данных в будущем) этот запрос даст вам наиболее общее направление ветра для каждого дня в текущем месяце:

select this_month.day, 
(
    select winddir 
    from weatherdatanum 
    where thedate >= this_month.day 
    and thedate < this_month.day + interval 1 day 
    group by winddir 
    order by count(*) desc 
    limit 1 
) as daily_leader 
from 
(
    select distinct date(thedate) as day 
    from weatherdatanum 
    where thedate >= concat(left(current_date(),7),'-01') - interval 1 month 
) this_month 
+0

Блестящий! Второй вариант хорош, так как wind_dir имеет свой собственный столбец. Не могли бы вы мне помочь это немного. Я бы хотел вернуть ежедневные значения в течение целого месяца. Вот ваш код плюс мои модификации, которые не делают достаточно работы: выберите thedate, winddir, граф (*) от weatherdatanum где месяц (thedate) = # DateFormat (теперь(), "мм") # группы по winddir, year (thedate), month (thedate), day (thedate) Порядок по количеству (*) desc limit 1 –

+0

Каков тип данных столбца 'thedate'? –

+0

Это дата и сайт, закодированный с использованием Coldfusion, если #dateformat (now(), "mm") # выглядит незнакомым. Спасибо –

0

Следующий запрос должен вернуть вам список направлений ветра наряду с подсчетами, отсортированных по большинству случаев:

SELECT wind_dir, COUNT(wind_dir) AS count FROM `mytable` GROUP BY wind_dir ORDER DESC 

Надежда, что помогает

+0

Спасибо за ваше время! С наилучшими пожеланиями. –

Смежные вопросы