Задавайте вопросы, мы ответим
Вы не зашли.
Здравствуйте.
Имеется статистическая таблица, на каждое посещение строка, в них есть поле datetime с временем посещения и вот встал вопрос как выбрать (посчитать, удалить) строки за определённый ДЕНЬ! DISTINCT тут не катит из-за типа поля, а вводить дополнительное поле date на крайний случай придумано.
Я понимаю что сие можно например средствами php нарисовать запросом типа: 01.01.2009 00:00:00 01.01.2009 23:59:59 но это катит если знать какие даты, а статистика скопилась уже за несколько месяцев, вот хотелось бы наконец-то её распарсить, а никак.
Заранее благодарю.
Неактивен
Вопрос так и останется без ответа?
Да кстати, вопрос правильнее поставлен в заголовке темы, выбрать за последний день труда не составляет, главное выбрать даты за весь период, если это возможно конечно.
Отредактированно Proger (01.11.2009 06:56:38)
Неактивен
Ну и, отвечая на изначальный вопрос, SELECT DISTINCT DATE(field) FROM tablename
Неактивен
о! Всё гениальное просто! Благодарю!!!
Неактивен
У меня возник похожий вопрос. Только мне надо выбрать записи от периода к периоду из одного поля `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)
Неактивен
Пишете Вы идеологически правильно, но не аккуратно
SELECT * FROM tablename WHERE uslovie = 576 AND (`date` BETWEEN '2009-10-01' AND '2009-11-01')
Неактивен
Спасибо за помощь , просто 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, возможно я неправильно понял описание этих команд. Поэтому лучше уточню.
Неактивен
Это где такие примеры??
Сравните результат
SELECT count(2);
и
SELECT sum(2);
count - это кол-во не NULL значений, а sum - сумма.
Неактивен
У меня схожая проблема, помогите пожалуйста.
Есть таблица посещений:
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) за каждый день в заданном интервале.
Неактивен
Можно двумя запросами:
Неактивен
А можно ли без Date() обойтись? Дело в том что база используется Firebird 1.5, а она крайне ограниченная в функциях. В частности нету функции Date().
Отредактированно IFK (25.04.2014 11:38:34)
Неактивен
Не знаю какие функции есть в FireBird. Может быть можно добиться того же с помощью SUBSTRING?
Неактивен
SUBSTRING посмотрел, он в FireBird 1.5 тоже не поддерживается.
Нашел рабочий способ, но он страшный и не красивый, но зато работает:
Отредактированно IFK (25.04.2014 15:34:29)
Неактивен
А подскажите пожалуйста, можно ли в запросе выше при отсутствии данных за определенную дату получать пустое значение? Сейчас просто если данных нет, ничего не выбирается.
Неактивен
Если вам нужно, чтобы в любом случае возвращалась хотя бы одна строка (даже если результат пустой), то, к сожалению, запрос так построить нельзя.
Неактивен
Можно делать left join с опорной таблицей из дат.
Неактивен
vasya написал:
Можно делать left join с опорной таблицей из дат.
Так не получится, потому что дат не хватит. Полагаю придется обходить эту проблему на PHP.
Неактивен