MIN (DATE) рдХрдм рд╣реИ? = MIN (DATE)?

рдореЗрд░реЗ рджреЛрд╕реНрдд рдЧреНрд░реЗрдЧ рдпрд╛рдВрдЧрдмрд╛рд▓рд╛рдб рдиреЗ рдореБрдЭреЗ рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЗрд░рд┐рдд рдХрд┐рдпрд╛ред рдЙрдиреНрд╣реЛрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рд╣рдлреНрддреЗ MySQL рдореЗрдВ рдореБрдЭреЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд╣реЗрд▓реА рджрд┐рдЦрд╛рдИред

рдЙрдирдХреЗ рдкрд╛рд╕ рдкреЗрд░рдХреЛрдирд╛ рд╕рд░реНрд╡рд░ 5.5.21 рдерд╛ рдЬреЛ рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рддрд╛рд▓рд┐рдХрд╛ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдЪрд▓ рд░рд╣рд╛ рдерд╛:

CREATE TABLE foo ( id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY, uid INT UNSIGNED NOT NULL, update_time DATETIME NOT NULL, .... INDEX `uid` (uid, update_time), INDEX `bar` (some_other_columns) .... ) ENGINE=InnoDB; 

рдЬрдм рдЙрд╕рдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╢реНрди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛:

 SELECT MIN(update_time) FROM foo WHERE update_time IS NOT NULL AND update_time <> '0000-00-00 00:00:00'; 

рдкрд░рд┐рдгрд╛рдо 2012-06-22 10:28:16 рдкрд░ рд▓реМрдЯрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЬрдм рдЙрд╕рдиреЗ рдХреБрдЫ рдЕрд▓рдЧ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛:

 SELECT MIN(t.update_time) FROM (SELECT uid, MIN(update_time) AS "update_time" FROM foo WHERE update_time IS NOT NULL AND update_time <> '0000-00-00 00:00:00' GROUP BY 1) t; 

рдЬреЛ рдЬрд╡рд╛рдм рд╡рд╛рдкрд╕ рдЖрдпрд╛ рд╡рд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдерд╛: 2011-08-22 11:27:27ред рдпрд╣ рд╕рд╣реА рдЙрддреНрддрд░ рд╣реИ, рддрд┐рдерд┐ 2012 рд╕реЗ рдирд╣реАрдВ рд╣реИред рд╣рдо рдХрд╛рд░рдг рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрдИ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдЖрдП рдереЗ, рдФрд░ рдПрдХ рд╕реБрдЭрд╛рд╡ рдерд╛ рдХрд┐ рдПрдХ рдЕрд▓рдЧ рд╕реВрдЪрдХрд╛рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП MySQL рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рд╣рдорд╛рд░реЗ рдЖрд╢реНрдЪрд░реНрдп рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ рдЬрдм рд╣рдордиреЗ рдмрд╛рд░ рдпрд╛ IGNORE INDEX (рдмрдЪреНрдЪреЗ) рдкрд░ INDEX рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдФрд░ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рдЬрд╡рд╛рдм рдорд┐рд▓рд╛: 2012-06-21 20:36:35ред
рдЗрд╕рд▓рд┐рдП, рдЬрдм рд╣рдордиреЗ "рд╕реНрдкрд╖реНрдЯ" рд╡рд┐рдХрд▓реНрдк рдХреА рдХреЛрд╢рд┐рд╢ рдХреА:

 SELECT update_time FROM foo ORDER BY update_time ORDER BY update_time LIMIT 3; 

рдФрд░ рдирддреАрдЬрд╛?

 0024-06-22 01:34:25 2011-08-22 11:27:27 2011-08-23 11:31:40 

рдЕрд╣рд╛! рдШреБрдорд╛рд╡рджрд╛рд░ рдбреЗрдЯрд╛! рд╣рдордиреЗ рдорд╛рди рд▓рд┐рдпрд╛ рдХрд┐ MIN () рдлрд╝рдВрдХреНрд╢рди рдиреЗ unix_timestamp / рдкреВрд░реНрдгрд╛рдВрдХ рдпрд╛ ctime рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд░реВрдкрд╛рдВрддрд░рдг рдХрд┐рдпрд╛; рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, SELECT MIN (UNIX_TIMESTAMP (update_time)) рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ ...ред рдкрд╣рд▓реЗ рдЕрджреНрдпрддрди_рдЯрд╛рдЗрдо рдлрд╝реАрд▓реНрдб рдкрд░ CAST () рдпрд╛ CONVERT () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╢реВрдиреНрдп рд▓реМрдЯрддрд╛ рд╣реИ (рддрд╛рдХрд┐ рдЗрд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛) 0024-06-22 рд░рд┐рдЯрд░реНрдиред

MySQL 5.5 рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ DATETIME рдкреНрд░рдХрд╛рд░ рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рддрд┐рдерд┐ рд╕реАрдорд╛ 1000-01-01 00:00:00 рд╕реЗ 9999-12-31 23:59:59 рд╣реИред рдирд┐рд░рдВрддрд░рддрд╛ рдмрддрд╛рддреА рд╣реИ рдХрд┐ "DATE тАЛтАЛрдФрд░ DATETIME рдХреЗ тАЛтАЛрд▓рд┐рдП," рд╕рдорд░реНрдерд┐рдд "рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХрдо рдорд╛рди рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИред" рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдиреЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдПрдХ рдЕрдЬреАрдм рдбреЗрдЯрд╛рдЯрд╛рдЗрдо рджрд░реНрдЬ рдХрд┐рдпрд╛ рд╣реИ, рдФрд░ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдореВрд▓реНрдп рдкреНрд░рд╛рд░реВрдк рдХреА рдЬрд╛рдВрдЪ рд╕реЗ рдЧреБрдЬрд░ рдЧрдпрд╛ рдФрд░ рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЖ рдЧрдпрд╛ред рдЙрдлрд╝ ...

рдЗрд╕рд╕реЗ рд╣рдо рдХреНрдпрд╛ рд╕рдордЭрддреЗ рд╣реИрдВ?

* рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдпрд╣рд╛рдВ sql_mode рд╕реЗрдЯ рдХрд░рдиреЗ рд╕реЗ рдЖрдкрдХреЛ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреАред рдпрджреНрдпрдкрд┐ 0024-06-21 рддрдХрдиреАрдХреА рд░реВрдк рд╕реЗ DATE / DATETIME рдХреЗ тАЛтАЛрд▓рд┐рдП рд╕рдорд░реНрдерд┐рдд рд╕реАрдорд╛ рд╕реЗ рдмрд╛рд╣рд░ рд╣реИ, рди рд╣реА TRADITIONAL, STRICT_ALL_TABLES, рдпрд╛ STRICT_TRANS_TABLES рднреА рдПрдХ рдЪреЗрддрд╛рд╡рдиреА рдлреЗрдВрдХрддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдмрдЧ рдпрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛ рд╣реИ? рдЪреБрдирд╛рд╡ рдЖрдкрдХрд╛ рд╣реИред
* рдЬрдм рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд╣рддрд╛ рд╣реИ рдХрд┐ "рдЗрд╕ рдмрд╛рдд рдХреА рдХреЛрдИ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛", рддреЛ рдмреЗрд╣рддрд░ рд╣реИ рдХрд┐ рдЬреЛрдЦрд┐рдо рди рд▓реЗрдВред
* рднрд▓реЗ рд╣реА рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рд╕рд╣реА рдореВрд▓реНрдп рд╣реИред рддреЛ рд╢рд╛рдпрдж рдЗрд╕ рд╕рдм рд╕реЗ рдпрд╣ рд╕рдмрд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдмрдХ рд╣реИ: рд╣рдореЗрд╢рд╛, рд╣рдореЗрд╢рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреА рд╕реАрдорд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВ! рдХреЗрд╡рд▓ рдкреНрд░рд╛рд░реВрдк рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред
рдФрд░ рдЕрдВрддрд┐рдо рдмрд┐рдВрджреБ - рдореИрдВ Percona рд╕рд░реНрд╡рд░ 5.5.25a рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛, рд▓реЗрдХрд┐рди рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рднреА рдЕрдЬрдирдмреА рдерд╛ред рдореИрдВрдиреЗ рдПрдХ рд╕рдорд╛рди рд╕рдВрд░рдЪрдирд╛ рд╡рд╛рд▓реА рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдИ:

 CREATE TABLE `foo` ( `i` int(11) NOT NULL AUTO_INCREMENT, `update_date` datetime NOT NULL, PRIMARY KEY (`i`), KEY `i` (`i`,`update_date`) ) ENGINE=InnoDB 

рдФрд░ рдлрд┐рд░ рджрд┐рдирд╛рдВрдХ 0024-06-21 рдХреЗ рд╕рд╛рде рдХреБрдЫ рдбрдореА рд▓рд╛рдЗрдиреЗрдВ рд╕рдореНрдорд┐рд▓рд┐рдд рдХреАрдВред рдлрд┐рд░ рдореИрдВрдиреЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░реНрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд╕рд╛рде рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдХрдИ рд╣рдЬрд╛рд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдбреЗрдЯрд╛рд╕реЗрдЯ рдХреЛ рдбрдВрдк рдХрд┐рдпрд╛ред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдРрд╕рд╛ рджрд┐рдЦ рд░рд╣рд╛ рдерд╛ рдЬреИрд╕реЗ рдореИрдВ рдЕрдкрдиреА рд╕реНрдерд┐рддрд┐ рдХреЛ рджреЛрд╣рд░рд╛ рдирд╣реАрдВ рд╕рдХрддрд╛ рдерд╛ - рдореЗрд░реА рдореЗрдЬ рдХреЗ рд▓рд┐рдП "SELECT MIN (рдЕрдкрдбреЗрдЯ_рдЯрд╛рдЗрдо) Foo" рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдиреЗ рд╕рд╣реА рдЙрддреНрддрд░ рджрд┐рдпрд╛ (1058-11-06 00:00:00), рдЬреЛ рдиреНрдпреВрдирддрдо рддрд╛рд░реАрдЦ рдереА рдиреНрдпреВрдирддрдо рд╕рдорд░реНрдерд┐рдд рдореВрд▓реНрдп 1000-01-01 00:00:00 рд╕реЗ рдмрдбрд╝реЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рдеред рд▓реЗрдХрд┐рди рдЬрдм рдореИрдВрдиреЗ рдЙрдирдХреЗ рдкреАрдХреЗ рдХреЛ рдмрджрд▓рдХрд░ рдбрдореА рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рддреЛ рдпрд╣ рд╣реБрдЖ:

  : (root@localhost) [test]> select * from foo order by update_date limit 5; +-------+---------------------+ | i | update_date | +-------+---------------------+ | 1 | 0024-06-21 10:35:55 | | 2 | 0024-06-21 10:35:55 | | 3 | 0024-06-21 10:35:55 | | 4 | 0024-06-21 10:35:55 | | 1159 | 1058-11-06 00:00:00 | +-------+---------------------+ (root@localhost) [test]> select min(update_date) from foo; +---------------------+ | min(update_date) | +---------------------+ | 1058-11-06 00:00:00 | +---------------------+ (root@localhost) [test]> update foo SET i=i+100000 where i<5; Query OK, 4 rows affected (0.00 sec) Rows matched: 4 Changed: 4 Warnings: 0 

  : (root@localhost) [test]> select min(update_date) from foo; +---------------------+ | min(update_date) | +---------------------+ | 2024-06-21 10:35:55 | +---------------------+ (root@localhost) [test]> select update_date FROM foo order by update_date LIMIT 5; +---------------------+ | update_date | +---------------------+ | 0024-06-21 10:35:55 | | 0024-06-21 10:35:55 | | 0024-06-21 10:35:55 | | 0024-06-21 10:35:55 | | 1058-11-06 00:00:00 | +---------------------+ 

рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИред рдПрдХ рдУрд░, рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреИрд╕реЗ MySQL рджреЛ рдЕрдВрдХреЛрдВ рдХреА рддрд╛рд░реАрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рджрд┐рдирд╛рдВрдХ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдпрд╣ 2024-06-21 рдмрддрд╛рддреЗ рд╣реИрдВ), рджреВрд╕рд░реА рдУрд░, рдЗрд╕рдиреЗ DATETIME рдбреЗрдЯрд╛ рдХреЛ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛, рдФрд░ рдЕрдм рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧрд▓рдд рдЙрддреНрддрд░ рджреЗрддрд╛ рд╣реИред

рдирд┐рд╖реНрдХрд░реНрд╖: рд╣рдореЗрд╢рд╛ рдЕрдкрдиреА рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпрд╛рдВ рдЬрд╛рдВрдЪреЗрдВ!

рдореВрд▓ рд▓реЗрдЦ: рдПрд░реНрдиреА рд╕реМрд╣рд╛рд░реНрдж MIN (DATE) рдХрдм рд╣реИ? = MIN (DATE)?

Source: https://habr.com/ru/post/In163845/


All Articles