回答

收藏

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

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

我想选择2013年的记录-04-0100:00:00','today但是,每天都有很多价值,因为它们每15分钟保存一个值,所以我只希望每天都有第一个或最后一个值。6 Q4 p; w7 }; ?! ]
表架构:
5 [2 u# _6 a4 O" {* c2 BCREATE 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:
, q& X8 G+ b2 d6 p+ [, tSELECT 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 ...如果可能的话,我想一口气…
  i7 t6 D6 W9 m, c& P非常感谢。( f  X8 D& Z. x6 |& B
编辑:    我的意思是,我每天都有查询,但我只想从reading_date >= '2013-04-01 00:00:00'c单个查询) k$ n! ?# l( L5 e9 `
EDIT2:    我有 64,260    条记录,table.value_magnitudes查询执行和响应需要很长时间,有时会超时。9 M; G! R( X. W. f. x7 o
                                                               
+ r2 \0 {5 _+ ~, L( Q    解决方案:                                                                , g7 ~8 ^2 ]' n' z2 D2 h
                                                                你可以在每个日期获得第一个条目
; f5 s. t5 }& N  g1 q( sselect * 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))
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则