Новичок нуждается в помощи по запросу (MYSQL) - PullRequest
0 голосов
/ 21 ноября 2018

Я новичок здесь и почти новый в SQL.

Моя проблема: у меня есть стол (T1) с

Datetime, CostNo, Amount

второй стол (T2) с

Date, CostNo, BillNo

В запросе должно быть

Date, CostNo, BillNo, Amount

У меня проблема с несколькими счетами на одну и ту же стоимость в один и тот же день.

Мне нужна сортировкаBillNo согласно Datetime.

T1 fe:

2018-11-02 11:14:52 3637    24.10  
2018-11-02 11:16:43 965     2.50  
2018-11-02 11:40:28 2552    3.50  
2018-11-02 11:40:51 2552    3.00  
2018-11-02 11:41:10 2552    3.50  
2018-11-02 11:41:36 2552    3.00  
2018-11-02 11:55:03 980     3.00  
2018-11-02 11:59:11 1976    3.00  

T2 fe:

2018-11-02  3637    26189  
2018-11-02  965     26190  
2018-11-02  2552    26191  
2018-11-02  2552    26192  
2018-11-02  2552    26193  
2018-11-02  2552    26194  
2018-11-02  980     26195  
2018-11-02  1976    26196  

, поэтому мой запрос:

select
T2.BillDate,
T2.CostNo,
T2.BillNo,
T1.Amount
from 
    `T2`,
    `T1`
where
    T1.CostNo =T2.CostNo
    AND DATE(T1.BillDateTime) = T2.BillDate

работаетштраф до CostNo 2552:

2018-11-02  3637    26189   24.10  
2018-11-02  965     26190   2.50  
2018-11-02  2552    26191   3.50  
2018-11-02  2552    26191   3.00  
2018-11-02  2552    26191   3.50  
2018-11-02  2552    26191   3.00  
2018-11-02  2552    26192   3.50  
2018-11-02  2552    26192   3.00  
2018-11-02  2552    26192   3.50  
2018-11-02  2552    26192   3.00  
2018-11-02  2552    26193   3.50  
2018-11-02  2552    26193   3.00  
2018-11-02  2552    26193   3.50  
2018-11-02  2552    26193   3.00  
2018-11-02  2552    26194   3.50  
2018-11-02  2552    26194   3.00  
2018-11-02  2552    26194   3.50  
2018-11-02  2552    26194   3.00  
2018-11-02  980     26195   3.00  
2018-11-02  1976    26196   3.00  

Это должно быть результатом:

2018-11-02  3637    26189   24.10  
2018-11-02  965     26190   2.50  
2018-11-02  2552    26191   3.50  
2018-11-02  2552    26192   3.00  
2018-11-02  2552    26193   3.50  
2018-11-02  2552    26194   3.00  
2018-11-02  980     26195   3.00  
2018-11-02  1976    26196   3.00  

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

ОК, спасибо за помощь.Я нашел решение сам.Вот, если кто-то узнает об этом: BillNo из таблицы 2. связан с DateTime таблицы 1, поэтому я создаю временную таблицу из таблицы 1 с SUM / GROUP BY и ORDER BY на DateTime и добавляю идентификатор строки (автоматическое приращение).Затем я создаю временную таблицу из таблицы 2, упорядочив ее по BillNo и добавив идентификатор строки.Теперь я могу сделать запрос с T1.ID = T2.ID и все.

Не стесняйтесь размещать лучшее и / или более короткое решение.

0 голосов
/ 21 ноября 2018

Я предполагаю, что вы хотите:

select T2.BillDate, T2.CostNo, T2.BillNo, T1.Amount
from `T2` join
     `T1`
     on T1.CostNo = T2.CostNo and DATE(T1.BillDateTime) = T2.BillDate
order by T!.CostNo, T1.BillDateTime DESC;

Сначала обратите внимание на правильное использование JOIN. Никогда не используйте запятые в предложении FROM. Всегда используйте правильный, явный, стандартный JOIN синтаксис.

Во-вторых, если вы хотите получить результаты в определенном порядке, тогда ваш запрос должен иметь ORDER BY пункт.Таблицы SQL и наборы результатов (без ORDER BY) представляют собой неупорядоченные наборы.Итак, вам нужен ORDER BY.Я предполагаю, что вы хотите сохранить все CostNo вместе, а затем внутри каждого, упорядоченные по дате / времени.

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