powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сумма столбца по диапазону дат
15 сообщений из 15, страница 1 из 1
Сумма столбца по диапазону дат
    #39934761
stoniq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Помогите пожалуйста. Есть таблица 'zakaz', в ней есть столбцы 'zakazy' и 'date'.
Нужно вытянуть сумму столбца 'zakazy' и взять диапазон с 15 дней назад до вчера (за последние 2 недели, начиная со вчерашнего дня)
...
Рейтинг: 0 / 0
Сумма столбца по диапазону дат
    #39934792
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну обычный WHERE BETWEEN. Для расчёта границ использовать date - INTERVAL.
...
Рейтинг: 0 / 0
Сумма столбца по диапазону дат
    #39934808
stoniq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

а для суммы столбца?
...
Рейтинг: 0 / 0
Сумма столбца по диапазону дат
    #39934829
stoniq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Что я не так делаю?

SELECT SUM('zakazy') FROM `zakaz` WHERE date BETWEEN NOW() - INTERVAL -1 DAY AND NOW() - INTERVAL -15 DAY
...
Рейтинг: 0 / 0
Сумма столбца по диапазону дат
    #39934843
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну наверное если отнимать отрицательное, то оно как бы увеличится...
...
Рейтинг: 0 / 0
Сумма столбца по диапазону дат
    #39934846
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще проверьте границы времени в интервале выборки. Они должны быть приведены на начало и конец суток соответственно. В противном случае может выпадать часть заказов в первом и последнем дне.
...
Рейтинг: 0 / 0
Сумма столбца по диапазону дат
    #39934849
stoniq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Akina,

Убрал минуса, прилетает пустота. В базе вот что:

ID SERIAL DATE ZAKAZY
1 1234567 2020-03-02 4
2 1234567 2020-03-02 5
3 1234567 2020-02-02 5


Должен был получить 9
...
Рейтинг: 0 / 0
Сумма столбца по диапазону дат
    #39934854
stoniq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluck99,

а если время отсутствует? просто дата
...
Рейтинг: 0 / 0
Сумма столбца по диапазону дат
    #39934857
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stoniq,
Научитесь отлаживать запросы. Делайте по частям. Сначала выборку по интервалу с указанными явно значениями (без SUM, без NOW/INTERVAL). Потом меняете одно значение на вычисляемое - смотрите результат. Потом второе значение - смотрите результат. Если получается количество строк = 9 (считаете глазами), добавляете SUM().
Тот же принцип применяете ко вложенным запросам. Сначала отлаживаете вложенный запрос, потом запрос выше уровнем и т.д.
...
Рейтинг: 0 / 0
Сумма столбца по диапазону дат
    #39934859
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stoniq
Gluck99,
а если время отсутствует? просто дата
Лучше вообще от времени уйти, если только дата везде фигурирует. Попробуйте CURDATE(). В вашем частном случае это не должно иметь значение, но на будущее - всегда имейте в виду, что в запрос сравнения дат может пролезть составляющая времени, и результат выборки (при внешней правильности содержимого) в каких-то случаях окажется некорректным.
...
Рейтинг: 0 / 0
Сумма столбца по диапазону дат
    #39934873
stoniq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluck99,

SELECT SUM(ZAKAZY) FROM `zakaz` WHERE `DATE` <= DATE_SUB(CURDATE(),INTERVAL 1 DAY)

Пока дошел до этого, так работает. Остальное методом тыка пока нет.
...
Рейтинг: 0 / 0
Сумма столбца по диапазону дат
    #39934876
stoniq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluck99,

добавил условие по SERIAL, всё работает, не знаю по правилам ли я всё сделал, либо можно как-то проще было сделать:


SELECT SUM(ZAKAZY) FROM `zakaz` WHERE `DATE` <= DATE_SUB(CURDATE(),INTERVAL 1 DAY) AND `DATE` >= DATE_SUB(CURDATE(),INTERVAL 14 DAY) AND `SERIAL` = 1234567
...
Рейтинг: 0 / 0
Сумма столбца по диапазону дат
    #39934885
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stoniq
не знаю по правилам ли
Да нормально в общем-то. Конечно, с точки зрения наглядности можно было написать
Код: sql
1.
2.
3.
4.
5.
SELECT SUM(zakazy) AS sum_zakaz
FROM zakaz 
WHERE `date` BETWEEN CURRENT_DATE - INTERVAL 14 DAY
                 AND CURRENT_DATE - INTERVAL 1 DAY
  AND `serial` = 1234567


но и так ничего.

А ещё я бы переименовал поля `date` и `serial - чтобы не использовать в качестве имён полей зарезервированные слова.
...
Рейтинг: 0 / 0
Сумма столбца по диапазону дат
    #39934902
Gluck99
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stoniq,
1. Что такое SERIAL? Поле? Не надо поля именовать служебными и прочими подобными словами. Это плохая привычка, которая в какой-то момент выйдет боком.
2. Что мешает использовать BETWEEN? Это нагляднее. Просто надо даты в условии BETWEEN поменять местами.
Код: sql
1.
2.
3.
SELECT SUM(zakazy) AS ItogoZakaz FROM zakaz 
WHERE ZakazData BETWEEN (SUBDATE(CURDATE(), 15)) AND (SUBDATE(CURDATE(), 1))
                AND SomeSerial = 1234567;

Date -> ZakazData, Serial -> SomeSerial
...
Рейтинг: 0 / 0
Сумма столбца по диапазону дат
    #39934951
stoniq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gluck99,

Это просто я придумал название, обозначает серийный номер устройства, не знал, что служебное поле так же называется. Буду иметь ввиду. Спасибо!
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Сумма столбца по диапазону дат
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]