SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 29.10.2009 01:41:39

Proger
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 04.09.2008
Сообщений: 172

Выбрать уникальные даты из дат со временем

Здравствуйте.
Имеется статистическая таблица, на каждое посещение строка, в них есть поле datetime с временем посещения и вот встал вопрос как выбрать (посчитать, удалить) строки за определённый ДЕНЬ! DISTINCT тут не катит из-за типа поля, а вводить дополнительное поле date на крайний случай придумано.
Я понимаю что сие можно например средствами php нарисовать запросом типа: 01.01.2009 00:00:00 01.01.2009 23:59:59 но это катит если знать какие даты, а статистика скопилась уже за несколько месяцев, вот хотелось бы наконец-то её распарсить, а никак.
Заранее благодарю.

Неактивен

 

#2 01.11.2009 06:52:39

Proger
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 04.09.2008
Сообщений: 172

Re: Выбрать уникальные даты из дат со временем

Вопрос так и останется без ответа? sad

Да кстати, вопрос правильнее поставлен в заголовке темы, выбрать за последний день труда не составляет, главное выбрать даты за весь период, если это возможно конечно.

Отредактированно Proger (01.11.2009 06:56:38)

Неактивен

 

#3 01.11.2009 06:59:26

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Выбрать уникальные даты из дат со временем

Вам поможет функция DATE():
...
WHERE DATE(datetime) = 'YYYY-MM-DD'

Неактивен

 

#4 01.11.2009 23:14:39

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Выбрать уникальные даты из дат со временем

Ну и, отвечая на изначальный вопрос, SELECT DISTINCT DATE(field) FROM tablename smile

Неактивен

 

#5 02.11.2009 08:12:51

Proger
Активист
Откуда: Санкт-Петербург
Зарегистрирован: 04.09.2008
Сообщений: 172

Re: Выбрать уникальные даты из дат со временем

о! Всё гениальное просто! Благодарю!!!

Неактивен

 

#6 02.11.2009 11:20:31

victort
Участник
Зарегистрирован: 27.10.2009
Сообщений: 6

Re: Выбрать уникальные даты из дат со временем

У меня возник похожий вопрос. Только мне надо выбрать записи от периода к периоду из одного поля `date`.
тип поля DATE
Т.е. я задал период допустим от 2009-10-01 до 2009-11-01 плюс поле для выбора.

По идее это должно выглядеть так
SELECT * FROM `table` where `uslovie`=576 `date`>=2009-10-01 AND `date`<=2009-11-01
Но я получаю NULL.

Если пишу
SELECT * FROM `table` where `uslovie`=576 `date`>=2009-10-01
то получаю результат тоже самое и со второй половинкой а вот вместе их заставить работать немогу. Можно это както побороть. Возможно нужно сделать вложенный запрос? Если да, то приведите пример а то я вложенные запросы еще не писал.

Мне нужно получить записи за период от одной даты до другой для конкретного условия.

Отредактированно victort (02.11.2009 11:35:13)

Неактивен

 

#7 02.11.2009 13:06:34

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Выбрать уникальные даты из дат со временем

Пишете Вы идеологически правильно, но не аккуратно smile

SELECT * FROM tablename WHERE uslovie = 576 AND (`date` BETWEEN '2009-10-01' AND '2009-11-01')

Неактивен

 

#8 04.11.2009 08:41:25

victort
Участник
Зарегистрирован: 27.10.2009
Сообщений: 6

Re: Выбрать уникальные даты из дат со временем

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

SELECT SUM(`value`), `uslovie`, `date` FROM tablename WHERE uslovie = 576 AND (`date` BETWEEN '2009-10-01' AND '2009-11-01')

В этом случае я получу массив через php с одной переменной внутри `value`, и как лучше написать SUM или COUNT по логике SUM, я же не считаю кол-во записей в данном столбце а сумирую кол-во данных в столбце. Просто в примерах пишут что данные операции эквивалентны и лучше использовать COUNT, возможно я неправильно понял описание этих команд. Поэтому лучше уточню.

Неактивен

 

#9 04.11.2009 09:54:00

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выбрать уникальные даты из дат со временем

Это где такие примеры??
Сравните результат
SELECT count(2);
и
SELECT sum(2);

count - это кол-во не NULL значений, а sum - сумма.

Неактивен

 

#10 24.04.2014 15:50:50

IFK
Участник
Зарегистрирован: 24.04.2014
Сообщений: 5

Re: Выбрать уникальные даты из дат со временем

У меня схожая проблема, помогите пожалуйста.
Есть таблица посещений:
TA_TYPE - приход\уход (Значения 1\2)
EV_DATETIME - дата:время
Так я выбираю статистику посещений за определенный период:

SELECT
   a.EV_DATETIME,
   a.TA_TYPE
FROM TALOG a, USERS b
WHERE a.USER_ID = b.USER_ID
AND b.USER_ID = 7
AND a.EV_DATETIME > '2014-01-24 00:00:00'
ORDER BY a.EV_DATETIME DESC

Но проблема в том что человек в течении дня может несколько раз ходить туда-сюда, соответственно выбирать надо не все, а только наибольшую дату ухода (a.TA_TYPE = 1) и наименьшую дату прихода (a.TA_TYPE = 2) за каждый день в заданном интервале.

Неактивен

 

#11 24.04.2014 23:00:45

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Выбрать уникальные даты из дат со временем

Можно двумя запросами:

SELECT
   MIN(a.EV_DATETIME)
FROM TALOG a, USERS b
WHERE a.USER_ID = b.USER_ID
AND b.USER_ID = 7
AND a.EV_DATETIME > '2014-01-24 00:00:00'
AND a.TA_TYPE=1
GROUP BY DATE(a.EV_DATETIME)
ORDER BY a.EV_DATETIME DESC;
 

SELECT
   MAX(a.EV_DATETIME)
FROM TALOG a, USERS b
WHERE a.USER_ID = b.USER_ID
AND b.USER_ID = 7
AND a.EV_DATETIME > '2014-01-24 00:00:00'
AND a.TA_TYPE=2
GROUP BY DATE(a.EV_DATETIME)
ORDER BY a.EV_DATETIME DESC;

Неактивен

 

#12 25.04.2014 10:36:05

IFK
Участник
Зарегистрирован: 24.04.2014
Сообщений: 5

Re: Выбрать уникальные даты из дат со временем

А можно ли без Date() обойтись? Дело в том что база используется Firebird 1.5, а она крайне ограниченная в функциях. В частности нету функции Date().

Отредактированно IFK (25.04.2014 11:38:34)

Неактивен

 

#13 25.04.2014 11:38:16

rgbeast
Администратор
MySQL Authorized Developer and DBA
Откуда: Москва
Зарегистрирован: 21.01.2007
Сообщений: 3880

Re: Выбрать уникальные даты из дат со временем

Не знаю какие функции есть в FireBird. Может быть можно добиться того же с помощью SUBSTRING?

Неактивен

 

#14 25.04.2014 13:49:24

IFK
Участник
Зарегистрирован: 24.04.2014
Сообщений: 5

Re: Выбрать уникальные даты из дат со временем

SUBSTRING посмотрел, он в FireBird 1.5 тоже не поддерживается.

Нашел рабочий способ, но он страшный и не красивый, но зато работает:

SELECT
MAX(a.EV_DATETIME) AS MAX_EV_DATETIME,
MIN(a.EV_DATETIME) AS MIN_EV_DATETIME,
a.TA_TYPE
FROM TALOG a
WHERE a.USER_ID = 257
AND a.EV_DATETIME > '2014-04-25'    
AND a.EV_DATETIME < '2014-04-26'  
GROUP BY a.TA_TYPE
 
UNION ALL  
SELECT
MAX(a.EV_DATETIME) AS MAX_EV_DATETIME,
MIN(a.EV_DATETIME) AS MIN_EV_DATETIME,
a.TA_TYPE
FROM TALOG a
WHERE a.USER_ID = 257
AND a.EV_DATETIME > '2014-04-24'    
AND a.EV_DATETIME < '2014-04-25'  
GROUP BY a.TA_TYPE
 
UNION ALL  
SELECT... # и так далее... по аналогии...



Получается чем больше дней, тем больше UNION ALL.
И даты приходится скриптом генерировать.

Отредактированно IFK (25.04.2014 15:34:29)

Неактивен

 

#15 25.04.2014 15:46:22

IFK
Участник
Зарегистрирован: 24.04.2014
Сообщений: 5

Re: Выбрать уникальные даты из дат со временем

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

Неактивен

 

#16 27.04.2014 03:31:50

LazY
_cмельчак
MySQL Authorized Developer and DBA
Зарегистрирован: 02.04.2007
Сообщений: 849

Re: Выбрать уникальные даты из дат со временем

Если вам нужно, чтобы в любом случае возвращалась хотя бы одна строка (даже если результат пустой), то, к сожалению, запрос так построить нельзя.

Неактивен

 

#17 28.04.2014 08:11:22

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Выбрать уникальные даты из дат со временем

Можно делать left join с опорной таблицей из дат.

Неактивен

 

#18 02.05.2014 11:40:51

IFK
Участник
Зарегистрирован: 24.04.2014
Сообщений: 5

Re: Выбрать уникальные даты из дат со временем

vasya написал:

Можно делать left join с опорной таблицей из дат.

Так не получится, потому что дат не хватит. Полагаю придется обходить эту проблему на PHP.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson