回答

收藏

SQL:如何每天选择记录,假设每天包含超过1个值MySQL

技术问答 技术问答 273 人阅读 | 0 人回复 | 2023-09-14

我想选择2013年的记录-04-0100:00:00','today但是,每天都有很多价值,因为它们每15分钟保存一个值,所以我只希望每天都有第一个或最后一个值。+ b! t- B4 Y3 Z5 W  A7 W: `
表架构:
4 n& l; U3 o4 u4 d4 `) S3 ]. d9 tCREATE TABLE IF NOT EXISTS `value_magnitudes` (  `id` int(11) NOT NULL AUTO_INCREMENT, `value` float DEFAULT NULL, `magnitude_id` int(11) DEFAULT NULL, `sdi_belongs_id` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL, `reading_date` datetime DEFAULT NULL, `created_at` datetime DEFAULT NULL, `updated_at` datetime DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=1118402 ;错误的SQL:8 p3 f% ?/ ]  I
SELECT value FROM `value_magnitudes` WHERE `value_magnitudes`.`reading_date` BETWEEN '2013-04-01 00:00:00' AND '2013-04-02 00:00:00' AND (`value_magnitudes`.magnitude_id = 234) LIMIT 1SELECT value FROM `value_magnitudes` WHERE `value_magnitudes`.`reading_date` BETWEEN '2013-04-02 00:00:00' AND '2013-04-03 00:00:00' AND (`value_magnitudes`.magnitude_id = 234) LIMIT 1SELECT value FROM `value_magnitudes` WHERE `value_magnitudes`.`reading_date` BETWEEN '2013-04-03 00:00:00' AND '2013-04-04 00:00:00' AND (`value_magnitudes`.magnitude_id = 234) LIMIT 1SELECT value FROM `value_magnitudes` WHERE `value_magnitudes`.`reading_date` BETWEEN '2013-04-04 00:00:00' AND '2013-04-05 00:00:00' AND (`value_magnitudes`.magnitude_id = 234) LIMIT 1SELECT value FROM `value_magnitudes` WHERE `value_magnitudes`.`reading_date` BETWEEN '2013-04-05 00:00:00' AND '2013-04-06 00:00:00' AND (`value_magnitudes`.magnitude_id = 234) LIMIT 1etc ...如果可能的话,我想一口气…+ x4 H, g9 U- v0 h9 n; G; p
非常感谢。1 Q4 A& h& F0 r6 g) J* h
编辑:    我的意思是,我每天都有查询,但我只想从reading_date >= '2013-04-01 00:00:00'c单个查询
8 a) e# r" q+ [* e- a3 MEDIT2:    我有 64,260    条记录,table.value_magnitudes查询执行和响应需要很长时间,有时会超时。
4 w8 ?4 U, f# J& {* Q2 a( C                                                                & g5 g1 N4 _5 ~5 }9 [' [' O) {$ w; G
    解决方案:                                                               
/ _% Z) J( v% ]; z; d8 G                                                                你可以在每个日期获得第一个条目
, |/ o2 w) ?( l- ^. U) ]6 ^. ]% Wselect * from value_magnitudeswhere id in  SELECT min(id)    FROM value_magnitudes    WHERE magnitude_id = 234    and date(reading_date) >= '2013-04-01'    group by date(reading_date))
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则