2014-01-17 2 views
1

Я пытаюсь получить всю строку данных в пределах некоторого диапазона дат только с одним условием, которое только возвращает первую строку типа «баланс», я думаю, мой вопрос должен лучше объяснять с образцом данных.Как выбрать данные с условием

Вот мой стол заявление

| date | type  | credit | debit | balance | 
| a | balance |  |  | 100.00 | 
| a | credit | 50.00 |  |   | 
| a | credit | 50.00 |  |   | 
| a | debit |  | 50.00 |   | 
| b | balance |  |  | 50.00 | 
| b | credit | 50.00 |  |   | 
| b | credit | 50.00 |  |   | 
| b | credit | 50.00 |  |   | 
| b | balance |  |  | -100.00 | 
| c | debit |  | 250.00|   | 

Это то, что я пытаюсь сделать (ожидаемый результат)

Мне нужно выполнить запрос, вернуть все строки из датировать до c, но только первый ряд с балансом типа

| date | type  | credit | debit | balance | 
| a | balance |  |  | 100.00 | 
| a | credit | 50.00 |  |   | 
| a | credit | 50.00 |  |   | 
| a | debit |  | 50.00 |   | 
| b | credit | 50.00 |  |   | 
| b | credit | 50.00 |  |   | 
| b | credit | 50.00 |  |   | 
| c | debit |  | 250.00|   | 

Что я знаю, здесь я могу достичь, выполнив 2 другой запрос

SELECT * FROM statement WHERE date >= a and date <= c and type = 'balance' ORDER BY date ASC LIMIT 1 
SELECT * FROM statement WHERE date >= a and date <= c and type != 'balance' ORDER BY date ASC 

Вот мой вопрос, почему мне нужно сделать это с 1 один запрос, Как я достичь этого результата с помощью одного запроса.

+1

ваш первый запрос, имеющий предел 1, таким образом Вы получаете только один ряд – user2936213

+0

пункт Использовать соединение. – Rikesh

+0

кроме Союза? Я попробовал это, но он ввернул мой класс php ... Я пытаюсь копать для более простого запроса –

ответ

2

Вы попробовали СОЮЗ?

SELECT * FROM statement WHERE date >= a and date <= c and type = 'balance' ORDER BY date ASC LIMIT 1 
UNION 
SELECT * FROM statement WHERE date >= a and date <= c and type != 'balance' ORDER BY date ASC 
0

Я не думаю, что вам нужно, чтобы дать какtype = 'balance' и type != 'balance' condition.it оленьей кожи сделать любой sense.the следующего запроса будет получать одни и ту же запись.

SELECT * 
FROM statement 
WHERE date >= a and date <= c ORDER BY type,date ASC 
+0

Я думаю, что CASE может помочь, снова прочитайте мой вопрос, я хочу, чтобы первый ряд с балансом типа –

+0

@LeonArmstrong, тогда почему бы вам не использовать заказ по типу, а не по дате? –

+0

проверить ожидаемый результат, я хочу, чтобы все строки, но игнорировали строки с балансом типа после первого выбора –

1

Использование Union с distinct

SELECT * FROM statement WHERE date >= a and date <= c and type = 'balance' ORDER BY date ASC LIMIT 1 
UNION DISTINCT 
SELECT * FROM statement WHERE date >= a and date <= c and type != 'balance' ORDER BY date ASC 
Смежные вопросы