2016-06-16 2 views
0

У меня есть таблица, и я хочу получить строку, когда значение конкретных столбцов является минимальным, а время между 9:15 и 10:00 утра.sql найти минимальное значение, удовлетворяющее определенным условиям

это мой код

Select time, size, sym, price FROM test WHERE 
price = (Select MIN(price) from 
(select time, size, price from test where sym = 'PTX' And date = '2014-01-02' And time >= '9:15' And time <'10:00' ) as test1 
) 
Group By sym, time, size, price; 

Я надеялся, что я хотел бы получить что-то вроде:

 time  | size | sym | price 
--------------+--------+------+------- 
9:53:32.486 | 100 | PTX | 2.42 

вместо этого я получаю

 time  | size | sym | price 
--------------+--------+------+------- 
11:53:40.198 | 100 | AMD | 2.42 
15:00:01.007 | 158 | AMD | 2.42 
10:27:16.818 | 100 | AMD | 2.42 
09:54:03.057 |  65 | GEVO | 2.42 
10:02:50.139 |  80 | SNTA | 2.42 
15:01:26.752 | 100 | AMD | 2.42 
14:02:25.981 | 1100 | AMD | 2.42 
14:35:20.165 | 882 | AMD | 2.42 
13:22:25.701 | 1900 | AMD | 2.42 
15:59:40.409 | 113 | SNTA | 2.42 
14:32:30.422 | 15900 | AMD | 2.42 
09:32:39.217 |  50 | SNTA | 2.42 
10:58:37.311 |  10 | OREX | 2.42 
10:12:28.215 | 100 | AMD | 2.42 
13:42:59.869 | 100 | OREX | 2.42 
11:13:12.193 | 100 | SNTA | 2.42 
09:40:25.264 |  98 | SNTA | 2.42 
11:02:04.777 | 200 | AMD | 2.42 
12:02:37.364 | 100 | AMD | 2.42 
09:51:47.947 | 100 | AMD | 2.42 
15:52:23.795 | 100 | OREX | 2.42 
10:03:16.637 | 100 | AMD | 2.42 
09:56:08.089 | 100 | AMD | 2.42 
15:45:28.617 | 1200 | AMD | 2.42 
+0

Поместите свой вопрос в базу данных, которую вы используете. –

+0

'psql' - это клиент командной строки для Postgres, поэтому я снова пометил вопрос с помощью' postgresql' –

ответ

0

Один метод использует только order by и ограничения результаты в одну строку:

Select time, size, sym, price 
from test 
where sym = 'PTX' And date = '2014-01-02' And time >= '9:15' And time < '10:00' 
order by price 
limit 1; 

Примечание: Некоторые базы данных по буквам limit в fetch first 1 row only, используйте top 1 в select, или аналогичные методы для ограничения количества возвращаемых строк.

1

Вам необходимо сопоставить WHERE в основном запросе с подзапросом. В настоящее время вы находите минимальную цену для условия, но не применяете такое же условие к основному запросу. Попробуйте следующее:

Select time, size, sym, price FROM test WHERE 
price = (Select MIN(price) from 
(select time, size, price from test where sym = 'PTX' And date = '2014-01-02' And time >= '9:15' And time <'10:00' ) as test1 
) and sym = 'PTX' And date = '2014-01-02' And time >= '9:15' And time <'10:00' 
Group By sym, time, size, price; 
Смежные вопросы