Как получить последнюю доступную стоимость из следующих данных в postgresql для соответствующего наименования товара? - PullRequest
0 голосов
/ 24 февраля 2020

См. Следующие примеры данных.

|availablestock  |  itemname  |  tdate            |
|----------------|------------|-------------------|
|86              |ABC         |2020-01-29 19:44:43|
|90              |ABC         |2020-01-27 19:32:59|
|88              |ABC         |2020-01-29 19:46:35|
|100             |Soap        |2020-01-26 19:46:35|
|98              |Soap        |2020-02-29 19:46:35|

Требуется следующий результат -

|availablestock  |  itemname  |  tdate            |
|----------------|------------|-------------------|
|88              |ABC         |2020-01-29 19:46:35|
|98              |Soap        |2020-02-29 19:46:35|

Ответы [ 3 ]

0 голосов
/ 24 февраля 2020

Я думаю, что вы ищете order by и limit

SELECT availablestock FROM TABLE 
WHERE TDATE BETWEEN '2020-01-20' AND '2020-01-29' 
ORDER BY TDATE DESC LIMIT 1

ПРОВЕРЬТЕ ДЕМО ЗДЕСЬ

0 голосов
/ 24 февраля 2020

Тестовый скрипт

DROP TABLE IF EXISTS "Items";
CREATE TABLE IF NOT EXISTS "Items"
(
    "Id" SERIAL NOT NULL PRIMARY KEY,
    "Name" VARCHAR(64) NOT NULL,
    "Stock" INT NOT NULL,
    "TDate" TIMESTAMP NOT NULL
);

INSERT INTO "Items"("Name", "Stock", "TDate") VALUES ('ABC', 86, '2020-01-29 19:44:43');
INSERT INTO "Items"("Name", "Stock", "TDate") VALUES ('ABC', 90, '2020-01-27 19:32:59');
INSERT INTO "Items"("Name", "Stock", "TDate") VALUES ('ABC', 88, '2020-01-29 19:46:35');


SELECT * FROM "Items"
WHERE "TDate" <@ tsrange('[2020-01-20 00:00:00 , 2020-01-30)') 
--//Included lowerbound and excluded upper bound -- Valid values 2020-01-20 00:00:00 to 2020-01-29 23:59:59
ORDER BY "TDate" DESC
LIMIT 1

В текстовой форме диапазона нижняя граница включается в виде "[", а исключительная нижняя граница в виде "(". Аналогично, включающая верхняя граница представлена ​​как «]», а исключительная верхняя граница представлена ​​как «)» Результат в PgAdmin4, подключенный к экземпляру PostgreSQL 10

Code

Ссылки:

0 голосов
/ 24 февраля 2020

Вам нужно ниже -

SELECT max(availablestock)
FROM YOUR_TABLE
WHERE tdate BETWEEN '2020-01-20' AND '2020-01-29'
...