Максимальное значение для нескольких операторов - PullRequest
0 голосов
/ 01 апреля 2020
+----+-------+-----------+---------------+
| ID | Name  | Orderdate | Catalog Price |
+----+-------+-----------+---------------+
| 7b | 34-10 | NULL      |          3000 |
| 7b | 34-10 | NULL      |          3000 |
| 7b | 34-10 | NULL      |          2000 |
| 7b | 35-12 | PL-17     |          3000 |
| 8b | 35-11 | PL-18     |          2000 |
| 8b | 34-13 | PL-18     |          2000 |
| 8b | 34-14 | PL-18     |         2000  |
| 8b | 34-15 | PL-18     |         2000  |
| 9b | 35-12 | PL-19     |          2000  
| 9b | 35-11 | PL-19     |          2000 |
| 9b | 34-18 | PL-19     |          2000 |
| 9b | 34-19 | PL-19     |          2000 |
| 9b | 34-20 | PL-19     |          2000 |
+----+-------+-----------+---------------+

Мне нужен список продуктов, где Id начинается с 7, где Name начинается с 34, где Orderdate = null и только записи с самой высокой ценой каталога

Вывод должен быть таким

 ID Name    Orderdate   Catalog Price
7b  34-10   NULL    3000
7b  34-10   NULL    3000

я думаю, что я не совсем ясен в своем объяснении, поэтому шаги

шаг 1 , где id начинается с 7

 ID Name    Orderdate   Catalog Price
    7b  34-10   NULL    3000
    7b  34-10   NULL    3000
    7b  34-10   NULL    2000
    7b  35-12   PL-17   3000

* шаг 2: * где имя начинается с 34

 ID Name    Orderdate   Catalog Price
    7b  34-10   NULL    3000
    7b  34-10   NULL    3000
    7b  34-10   NULL    2000

шаг 3, где orderdate = null

ID  Name    Orderdate   Catalog Price
    7b  34-10   NULL    3000
    7b  34-10   NULL    3000
    7b  34-10   NULL    2000

шаг 4: с самой высокой ценой каталога

 ID Name    Orderdate   Catalog Price
    7b  34-10   NULL    3000
    7b  34-10   NULL    3000

Ответы [ 3 ]

2 голосов
/ 01 апреля 2020

Пожалуйста, отметьте свою БД. Вот что вы можете попробовать для Oracle:

SELECT id,name,orderdate,catalog_price
FROM TABLE a
WHERE id LIKE '7%' AND name LIKE '34%' AND orderdate IS NULL
  AND catalog_price = (SELECT max(catalog_price) FROM TABLE b 
  WHERE a.id=b.id AND a.name=b.name)
0 голосов
/ 01 апреля 2020

Если вы хотите, чтобы максимальная цена_каталога на группу (идентификатор, имя, дата заказа), вам нужна эта

select id, name, orderdate, max(catalog_price) as catalog_price
from my_table
where like'7%' and name like'34%' and orderdate is null
group by id, name, orderdate

Если вам не нужна группа, вам нужна эта

select id, name, orderdate,  catalog_price
from my_table
where id like'7%' and name like'34%' and orderdate is null
and catalog_price = (select max(catalog_price) from my_table)

DEMO

0 голосов
/ 01 апреля 2020
SELECT * FROM Table
WHERE 
Id LIKE '7%' 
AND Name LIKE '34%' 
AND OrdeDate IS NULL
AND Catalog Price = ( SELECT MAX(Catalog Price) FROM Table )

Не совсем уверен, что означает

only the records with highest catalog price

, если максимальная цена в таблице, чем мой ответ, верна, если максимальная цена сгруппирована по id, name, то @ django -приобретенный ответ верен

...