Obține cele mai recente record de data mysql

0

Problema

Am un tabel in care am stoca un cod, un pret si o data.

Codul este de tip varchar, pretul este de tip float (da, știu că este mai bine să depozitați-l ca Dublu), data este data de tipul de

create table prices (
 code varchar(15), 
 price float(5),
 date date
)

deci,

insert into prices (code,price,date) values
('ADV000001','2.1','2021-02-03'),
('ADV000001','0.3','2021-11-22'),
('ADV000001','20.0','2021-11-23'),
('ADV000001','31.4','2017-01-11'),
('ADV000001','99.99','2012-12-09'),
('ADV000123','31.4','2017-04-21'),
('ADV000123','0.4','2016-12-02'),
('ADV000123','31','2012-11-06'),
('ADV000991','3','2000-01-15'),
('ADV000991','1.4','2004-01-13'),
('ADV000991','0.9','2011-01-30'),
('ADV000991','12','2017-01-23'),
('ADV000991','854.82','2004-04-30'),
('ADV000991','231.11','2009-04-15'),
('ADV000991','242.66','2021-04-09'),
('ADV000912','111.1','2021-01-11'),
('ADV000912','1.4','2020-01-11'),
('ADV031242','75.48','2019-03-11'),
('ADV031242','231.42','2019-07-11'),
('ADV011912','1324.11','1994-11-11'),
('ADV000112','685.04','1993-06-11'),
('ADV000777','757.54','2001-06-11'),
('ADV000777','221.74','2002-09-11'),
('ADV000777','1352.12','2012-04-11'),
('ADV000215','856.81','2011-12-11'),
('ADV000202','511.99','2011-11-11')

Încerc să fac acest selectați, dar nu merge foarte bine, aduce data corectă, cu toate acestea mi-aduce orice preț, nu cel corect!!!!

SELECT 
code, price, date 
FROM 
prices 
WHERE 
date = (SELECT MAX(date) FROM prices) 

rezultatul:

code       price    date
ADV000001   0.3    2021-11-23

În mod ideal, acesta ar trebui să arate fiecare cod cu prețurile respective și data cea mai recentă.

code           price    date
ADV000001      20       2021-11-23
ADV000123      31.4     2017-04-21
ADV000991    242.66     2021-04-09
...          ...          ... 

Orice idei? poate un sub-consult? un grup de condamnare să nu funcționeze!

MYSQL MAX() funcția nu pare să funcționeze, nu grup de coduri și numai ce mă aduce un record. Aici este link-ul unde puteți cere rapid la întrebările dumneavoastră, aș aprecia. dbfiddle.marea britanie

mysql
2021-11-24 02:59:24
3

Cel mai bun răspuns

1

Aici sunt întrebările dumneavoastră, dar în primul rând!!! Nu este niciodată o idee bună să utilizați SQL cuvinte cheie ca nume de coloane. Dacă faci asta, trebuie să citez tzhe fieldname cu backticks.

obține un rezultat

SELECT 
CODE, price, DATE 
FROM 
prices 
WHERE 
`date`= (SELECT MAX(DATE) FROM prices);

obține toate rezultatele

SELECT p1.`code`, p1.`maxdate`, p2.`price` FROM (
    SELECT `CODE`, MAX(`DATE`) AS maxdate FROM prices GROUP BY `CODE`) AS p1
LEFT JOIN prices p2 ON p1.`code`= p2.`code`AND p2.`date` = p1.maxdate
ORDER BY p1.`code`;

proba

MariaDB [order]> SELECT 
    -> CODE, price, DATE 
    -> FROM 
    -> prices 
    -> WHERE 
    -> `date`= (SELECT MAX(DATE) FROM prices);
+-----------+-------+------------+
| CODE      | price | DATE       |
+-----------+-------+------------+
| ADV000001 |    20 | 2021-11-23 |
+-----------+-------+------------+
1 row in set (0.06 sec)


MariaDB [order]> SELECT p1.`code`, p1.`maxdate`, p2.`price` FROM (
    -> SELECT `CODE`, MAX(`DATE`) AS maxdate FROM prices GROUP BY `CODE`) AS p1
    -> LEFT JOIN prices p2 ON p1.`code`= p2.`code`AND p2.`date` = p1.maxdate
    -> ORDER BY p1.`code`;
+-----------+------------+---------+
| code      | maxdate    | price   |
+-----------+------------+---------+
| ADV000001 | 2021-11-23 |      20 |
| ADV000112 | 1993-06-11 |  685.04 |
| ADV000123 | 2017-04-21 |    31.4 |
| ADV000202 | 2011-11-11 |  511.99 |
| ADV000215 | 2011-12-11 |  856.81 |
| ADV000777 | 2012-04-11 | 1352.12 |
| ADV000912 | 2021-01-11 |   111.1 |
| ADV000991 | 2021-04-09 |  242.66 |
| ADV011912 | 1994-11-11 | 1324.11 |
| ADV031242 | 2019-07-11 |  231.42 |
+-----------+------------+---------+
10 rows in set (0.01 sec)

MariaDB [order]> 
2021-11-24 03:35:13
0

Face Select query este "Comanda" în ordine descrescătoare. Eu vorbesc despre interogare de Selectare de a obține cea mai recentă întâlnire în baza dumneavoastră de date.

2021-11-24 03:24:19
0

Dacă utilizați where `date` = (SELECT MAX(`date`) FROM `prices`) atunci se va selecta doar una mai recente (MAX) de la masă pentru a utiliza în aceasta data condiție. Rezultatul este arată doar 1 record.

Se referă la această întrebare

SELECT 
    `prices`.*
FROM 
    `prices`
INNER JOIN (
    SELECT MAX(`date`) AS `maxdate`, `price`, `code`
    FROM `prices`
    GROUP BY `code`
) AS `prices2` 
    ON `prices`.`date` = `prices2`.`maxdate`
ORDER BY `date` DESC

Rezultate:

cod pret data
ADV000001 20 2021-11-23
ADV000991 242.66 2021-04-09
ADV000912 111.1 2021-01-11
ADV031242 231.42 2019-07-11
ADV000123 31.4 2017-04-21
ADV000777 1352.12 2012-04-11
ADV000215 856.81 2011-12-11
ADV000202 511.99 2011-11-11
ADV011912 1324.11 1994-11-11
ADV000112 685.04 1993-06-11
2021-11-24 03:39:18

În alte limbi

Această pagină este în alte limbi

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................