Выберите из 2 таблиц вызвать ошибки - PullRequest
0 голосов
/ 05 июня 2019

Я получил 2 таблицы MySQL

"MerchantAccount" Имеет следующие столбцы:

  • провайдер
  • используется
  • неактивен
  • maxPerMonth

Тогда в качестве трекера у меня есть еще одна таблица, сколько было использовано в месяц.

"merchantprocessing" Имеет следующие столбцы;- id - date - mid (provider из 'MerchantAccount'

Мне нужно, чтобы он нашел случайного ПРОВАЙДЕРА, который не использовал свой максимум в месяц, как, например, в maxPerMonth,1500 транзакций, должно быть максимально для провайдера. Он должен распечатать случайного провайдера для того, чтобы все транзакции были правильно распределены по всем провайдерам в таблице (отсюда использование + 1). Способ поиска ежемесячных транзакцийна соответствующем провайдере находится в таблице "merchantprocessing". Пробовал, но не работает

Я пытаюсь http://www.sqlfiddle.com/#!9/03b168/26

SELECT a.provider, a.inactive, b.mid, b.date, a.used,
   Count(b.id) AS usedThisMonth
FROM   merchantaccount a, 
   merchantprocessing b
WHERE  a.inactive = '0'
   AND ( a.provider = b.mid 
         AND Year(b.date) = Year(CURRENT_DATE()) 
         AND Month(b.date) = Month(CURRENT_DATE()) 

       ) 
       AND a.used < usedThisMonth
   ORDER  BY a.used ASC 
   LIMIT  1 `

Неизвестный столбец 'usedThisMonth' в 'предложении where«

Ответы [ 2 ]

0 голосов
/ 05 июня 2019

Это дает вам сравнение использованной суммы и максимальной суммы на одного продавца в месяц:

select a.provider, a.inactive,
       year(p.date), month(p.date),
       count(p.id) as used_this_month,
       a.maxPerMonth
from merchantaccount a join 
     merchantprocessing p
     on a.provider = p.mid 
where a.inactive = 0  -- no quotes, because this is a number
group by a.provider, a.inactive, a.maxPerMonth,
         year(p.date), month(p.date);

Вы можете добавить having a.maxPerMonth >= count(b.id), чтобы получить те, которые превысили максимум.

Вы можете добавить p.date >= curdate() - interval (1 - day(curdate()) day, чтобы получить только данные за текущий месяц.

0 голосов
/ 05 июня 2019

Попробуй так:

SELECT a.provider, a.inactive, b.mid, b.date, a.used,
       Count(b.id) AS usedThisMonth
FROM   merchantaccount a, 
       merchantprocessing b
WHERE  a.inactive = '0'
       AND ( a.provider = b.mid 
             AND Year(b.date) = Year(CURRENT_DATE()) 
             AND Month(b.date) = Month(CURRENT_DATE()) 

           ) 
GROUP  BY a.provider, a.inactive, b.mid, b.date, a.used
HAVING a.used < Count(b.id)
LIMIT 1

Обратите внимание, что это не приведет к появлению каких-либо строк, поскольку ни одна из них не удовлетворяет условию a.used < Count(b.id).

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