Я хочу получить последнюю запись за текущий месяц - PullRequest
0 голосов
/ 23 мая 2018

У меня есть таблица, в которой хранится бюджет, выделенный для магазинов.

enter image description here

Я хочу получить запись для всех магазинов текущего месяца для этого янаписал запрос:

SELECT * FROM table_budget WHERE store IN ([$STORE$]) AND MONTH(Date) = MONTH(CURRENT_DATE())
            AND YEAR(Date) = YEAR(CURRENT_DATE());

Но я хочу получить последнюю запись, если у магазина есть два или более бюджетов на текущий месяц.

Ответы [ 4 ]

0 голосов
/ 23 мая 2018

Попробуйте это:

SELECT * FROM table_budget WHERE store IN ([$STORE$]) AND MONTH(Date) = MONTH(CURRENT_DATE())
AND YEAR(Date) = YEAR(CURRENT_DATE()) ORDER BY Date DESC
LIMIT 1;
0 голосов
/ 23 мая 2018

Самостоятельное объединение получает последнюю запись для каждого магазина

SELECT 
  a.* 
FROM
  table_budget a 
  LEFT JOIN table_budget b 
    ON a.store = b.store 
    AND a.Date < b.Date 
WHERE a.store IN ([ $STORE$ ]) 
  AND MONTH(a.Date) = MONTH(CURRENT_DATE()) 
  AND YEAR(a.Date) = YEAR(CURRENT_DATE()) 
  AND b.store IS NULL ;
0 голосов
/ 23 мая 2018

Вы также можете попробовать функцию LAST , но не все приложения поддерживают ее

Таким образом, обходное решение, как было указано ранее, заключается в использовании ORDER BY изатем используйте DESC .Если вам нужна только последняя запись, добавьте LIMIT

, например, SELECT имя_ столбца ОТ имя_таблицы ORDER BY имя_ столбца DESC LIMIT1;

0 голосов
/ 23 мая 2018

Добавьте это в конец вашего запроса:

AND NOT EXISTS
(
    SELECT * FROM table_budget t2 
    WHERE t2.Store=table_budget.Store and t2.Date>table_budget.Date
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...