Sql: выбор в диапазоне STR_TO_DATE - PullRequest
0 голосов
/ 19 апреля 2020

Моя sql работает на одну дату, теперь я хочу выбрать по диапазону, что я могу сделать, чтобы добавить дату диапазона?

SELECT 
        products.id, 
        products.name, 
        (select ifnull(sum(stocks.qty),0) from stocks where stocks.pid=products.id and DATE(stocks.created_at) = STR_TO_DATE('15,4,2020','%d,%m,%Y') ) as stock_in_today,

        (select ifnull(sum(loadings.qty),0) from loadings where loadings.pid=products.id and DATE(loadings.created_at) = STR_TO_DATE('15,4,2020','%d,%m,%Y') ) as total_loadings_today,

        (select ifnull(sum(stocks.qty),0) from stocks where stocks.pid=products.id) as total_stock_till_date,

        (select ifnull(sum(loadings.qty),0) from loadings where loadings.pid=products.id) as total_loadings_till_date,

        ((select ifnull(sum(stocks.qty),0) from stocks where stocks.pid=products.id and DATE(stocks.created_at) < STR_TO_DATE('15,4,2020','%d,%m,%Y'))-(select ifnull(sum(loadings.qty),0) from loadings where loadings.pid=products.id and DATE(loadings.created_at) < STR_TO_DATE('15,4,2020','%d,%m,%Y'))) as opening_balance,

        ((select ifnull(sum(stocks.qty),0) from stocks where stocks.pid=products.id and DATE(stocks.created_at) <= STR_TO_DATE('15,4,2020','%d,%m,%Y'))-(select ifnull(sum(loadings.qty),0) from loadings where loadings.pid=products.id and DATE(loadings.created_at) <= STR_TO_DATE('15,4,2020','%d,%m,%Y'))) as closing_balance

        from products

мой взгляд

enter image description here

1 Ответ

0 голосов
/ 19 апреля 2020

Вы можете использовать коррелированные подзапросы. Вот пример:

select d.dte,
       p.id, p.name,
        (select coalesce(sum(s.qty), 0)
         from stocks s
         where s.pid = p.id and
               s.created_at >= d.dte and
               s.created_at < d.dte + interval 1 day
        ) as stock_in_today,
        . . .
from products p cross join
     (select date('2020-01-01') as dte union all
      select date('2020-02-01')
     ) d

И так далее для остальных подзапросов.

Обратите внимание на изменения, которые я внес в запрос:

  • Добавлены псевдонимы таблиц, чтобы ссылки на таблицы было легче писать и читать.
  • Использовать стандартный формат даты для литералов дат.
  • Изменен лог c для использования прямых сравнений вместо функций.

Этот запрос может использовать индекс для stock(pid, created_at).

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