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

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

SELECT SUM('zakazy') FROM `zakaz` WHERE date BETWEEN NOW() - INTERVAL -1 DAY AND NOW() - INTERVAL -15 DAY
...
Рейтинг: 0 / 0
05.03.2020, 17:51
    #39934843
Akina
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма столбца по диапазону дат
Ну наверное если отнимать отрицательное, то оно как бы увеличится...
...
Рейтинг: 0 / 0
05.03.2020, 17:55
    #39934846
Gluck99
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма столбца по диапазону дат
Еще проверьте границы времени в интервале выборки. Они должны быть приведены на начало и конец суток соответственно. В противном случае может выпадать часть заказов в первом и последнем дне.
...
Рейтинг: 0 / 0
05.03.2020, 17:59
    #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
05.03.2020, 18:05
    #39934854
stoniq
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма столбца по диапазону дат
Gluck99,

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

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

Пока дошел до этого, так работает. Остальное методом тыка пока нет.
...
Рейтинг: 0 / 0
05.03.2020, 18:50
    #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
05.03.2020, 19:11
    #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
05.03.2020, 19:40
    #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
05.03.2020, 22:35
    #39934951
stoniq
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сумма столбца по диапазону дат
Gluck99,

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


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