Mysql'de tarihe göre en son kaydı alın

0

Soru

Kod, fiyat ve tarih depoladığım bir tablom var.

Kod varchar türüdür, fiyat şamandıra tipidir (evet, çift olarak saklamanın daha iyi olduğunu biliyorum), tarih, tür tarihidir

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

böyle,

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')

Bunu seçmeye çalışıyorum, ama çok iyi çalışmıyor, doğru tarihi getiriyor, ancak bana herhangi bir fiyat getiriyor, doğru olanı değil!!!!

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

sonuç:

code       price    date
ADV000001   0.3    2021-11-23

İdeal olarak, her kodu kendi fiyatları ve en son tarihi ile göstermelidir.

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

Herhangi bir fikir? belki bir alt konsültasyon? cümleye göre bir grup işe yaramaz!

MYSQL MAX () işlevi çalışmıyor gibi görünüyor, kodlara göre gruplandırılmıyor ve bana sadece bir kayıt getiriyor. Hızlı sorgular sorabilirsiniz nerede işte link, memnun olurum. dbfiddle.uk

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

En iyi cevabı

1

İşte sorgularınız, ama önce!!! SQL anahtar kelimelerini sütun adları olarak kullanmak asla iyi bir fikir değildir. Bunu yaparsanız, tzhe alan adını backticks ile alıntılamanız gerekir.

bir sonuç alın

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

tüm sonuçları alın

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`;

örnek

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

Select sorgunuzun" Order by " değerini azalan düzende yapın. Veritabanınızdaki en son tarihi almak için Select sorgusundan bahsediyorum.

2021-11-24 03:24:19
0

Eğer kullanırsanız where `date` = (SELECT MAX(`date`) FROM `prices`) daha sonra sadece en son birini seçecektir (MAX) bu tarih koşulunda kullanılacak tablodan. Sonuç sadece 1 kayıt gösteriyor.

Bakın gelen bu soru

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

Sonuçlar:

kod fiyat tarih
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

Diğer dillerde

Bu sayfa diğer dillerde

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