У меня есть одна таблица с несколькими строками для конкретных пользователей. У меня есть данные за многие годы, например 2019,2018,2016 и более. У меня есть два сценария:
1. Я хочу данные конкретного INVOICE_YEAR.
2, но в то же время я хочу ПЕРВУЮ ДАТУ СЧЕТА, СОЗДАННУЮ ДЛЯ ОСОБЕННОГО ПОЛЬЗОВАТЕЛЯ.
мой SQL-запрос:
$yearOf
это динамическая годовая переменная ввода.
$yearOf
= 2019;
$Records = "SELECT MIN(inv.INVOICE_DATE) AS MIN_INVOICE_DATE
FROM invoices as inv
LEFT JOIN customers as cm ON cm.CUSTOMER_ID = inv.CUSTOMER_ID
where inv.INVOICE_YEAR IN (".$yearOf.")
group by inv.CUSTOMER_ID ORDER BY cm.CUSTOMER_NAME ASC";
Как вы можете видеть мой запрос, если я хочу получить данные всех пользователей, у которых INVOICE_YEAR IN ('2019'). Мое первое условие будет удовлетворено, яполучит все данные пользователей, у которых INVOICE_YEAR = 2019.
Но в то же время я хочу указать дату первого счета, поэтому для этого я использовал MIN(inv.INVOICE_DATE)
, но, как я использовал
where inv.INVOICE_YEAR IN (".$yearOf.")
, это в тех условиях, где это даетмне первая дата счета определенного года.
Но я хочу первую дату счета из всей таблицы для всех пользователей.
Я пробовал с подзапросом, но он показывает мне ошибку Подзапрос возвращает больше, чем1 строка
Мой запрос с подзапросом:
$Records = "SELECT
(
SELECT MIN(inv.INVOICE_DATE) AS MIN_INVOICE_DATE FROM invoices AS inv GROUP BY inv.CUSTOMER_ID) AS MIN_INVOICE_DATE
FROM invoices as inv
LEFT JOIN customers as cm ON cm.CUSTOMER_ID = inv.CUSTOMER_ID
where inv.INVOICE_YEAR IN (".$yearOf.")
group by inv.CUSTOMER_ID ORDER BY cm.CUSTOMER_NAME ASC";
Например:
3 клиентов есть 101,102,103
данные в таблице похожи:
id | customer_id | invoice_date | invoice_year
1 | 101 | 2019-01-01 | 2019
2 | 101 | 2016-01-01 | 2016
3 | 101 | 2017-01-01 | 2017
4 | 101 | 2016-01-02 | 2016
5 | 102 | 2019-01-02 | 2019
6 | 103 | 2018-01-02 | 2018
7 | 103 | 2019-01-07 | 2019
8 | 102 | 2015-01-02 | 2015
По мере того как я запрашиваю запрос для получения данных INVOICE_YEAR 2019 с первой датой выставления счетаконкретный пользователь, поэтому он должен выдать вывод, например:
id | customer_id | invoice_date | invoice_year | min_invoice_date
1 | 101 | 2019-01-01 | 2019 | 2016-01-01
5 | 102 | 2019-01-02 | 2019 | 2015-01-02
7 | 103 | 2019-01-07 | 2019 | 2019-01-07
С, как я хочу первая дата выставления счета В КОЛОННЕ MIN_INVOICE_DATE всех пользователей.
Но он показывает мне данные как:
id | customer_id | invoice_date | invoice_year | min_invoice_date
1 | 101 | 2019-01-01 | 2019 | 2019-01-01
5 | 102 | 2019-01-02 | 2019 | 2019-01-02
7 | 103 | 2019-01-07 | 2019 | 2019-01-07