Mysql 选择时间戳中每天的最后一个条目和相应的值

Mysql 选择时间戳中每天的最后一个条目和相应的值,mysql,sql,join,Mysql,Sql,Join,我有一个名为“admin_tmp”的表,其结构如下 Field | Type | Null | Key | Default | Extra ----------------------+------------------+------+-----+---------+--------------- id | int(10) unsigned | NO | PRI | NULL | auto_

我有一个名为“admin_tmp”的表,其结构如下

Field                 | Type             | Null | Key | Default | Extra
----------------------+------------------+------+-----+---------+---------------
id                    | int(10) unsigned | NO   | PRI | NULL    | auto_increment
time_stamp            | varchar(30)      | NO   |     | NULL    |
curr_property         | int(5) unsigned  | NO   |     | NULL    |
curr_property_cost    | int(5) unsigned  | NO   |     | NULL    |
day_property          | int(S) unsigned  | NO   |     | NULL    |
day_property_cost     | int(5) unsigned  | NO   |     | NULL    |
curr_solar_generating | int(5) unsigned  | NO   |     | NULL    |
curr_solar_export     | int(5) unsigned  | NO   |     | NULL    |
day_solar_generated   | int(5) unsigned  | NO   |     | NULL    |
day_solar_export      | int(5) unsigned  | NO   |     | NULL    |
curr_chanl            | int(5) unsigned  | NO   |     | NULL    |
curr_chan2            | int(5) unsigned  | NO   |     | NULL    |
curr_chan3            | int(5) unsigned  | NO   |     | NULL    |
day chan1             | int(5) unsigned  | NO   |     | NULL    |
day_chan2             | int(5) unsigned  | NO   |     | NULL    |
day_chan3             | int(5) unsigned  | NO   |     | NULL    |
现在,我想在两个时间值7:0:0和7:59:59之间选择最后一个条目,仅日期,而不是每天的时间戳及其相应的值

我只能使用下面的查询获取以下内容

质疑


我开始知道我必须使用join来实现这一点,但再次强调,我不能使用join而没有任何错误

试试这个,它会给你每天的最新记录


您将选择相同的数据两次,一次获取记录,一次获取每个日期的最大时间。然后两者都加入,这样您就可以进行筛选,以便只获取每个日期的最大时间记录

SELECT 
  rec.id, 
  rec.time_stamp, 
  rec.curr_property, 
  rec.day_property, 
  rec.mytime, 
  rec.mydate
FROM 
(
  SELECT 
    admin_tmp.*,
    DATE(time_stamp) AS mydate,
    TIME(time_stamp) AS mytime
  FROM admin_tmp
  WHERE TIME(time_stamp) >= '07:00:00' AND TIME(time_stamp) <= '07:59:59'
) as rec
JOIN
(
  SELECT 
    DATE(time_stamp) as mydate,
    MAX(TIME(time_stamp)) as mytime
  FROM admin_tmp
  WHERE TIME(time_stamp) >= '07:00:00' AND TIME(time_stamp) <= '07:59:59'
  GROUP BY DATE(time_stamp)
) as max_times ON max_times.mydate = rec.mydate and max_times.mytime = rec.mytime
ORDER BY rec.mytime LIMIT 15;

这可能会对你有所帮助。给出了每个小时的最新记录。您的预期输出是什么?@AbhikChakraborty我需要获得输出中每个日期的最长时间这就是我正在努力解决的问题,谢谢您@Thorsten Ketter
   id | time_stamp          | curr_property | day_property | mytime   | mydate    
------+---------------------+---------------+--------------+----------+-----------
 1225 | 2014-06-01 07:00:04 |          1641 |        11466 | 07:00:04 | 2014-06-01
13802 | 2014-06-03 07:00:05 |          1850 |        15452 | 07:00:05 | 2014-06-03
 7418 | 2014-06-02 07:00:05 |          1577 |        13053 | 07:00:05 | 2014-06-02
 1226 | 2014-06-01 07:00:16 |          1593 |        11471 | 07:00:16 | 2014-06-01
13803 | 2014-06-03 07:00:17 |          1577 |        15457 | 07:00:17 | 2014-06-03
 7419 | 2014-06-02 07:00:17 |          1528 |        13058 | 07:00:17 | 2014-06-02
 1227 | 2014-06-01 07:00:28 |          1577 |        11476 | 07:00:28 | 2014-06-01
 7420 | 2014-06-02 07:00:29 |          1545 |        13063 | 07:00:29 | 2014-06-02
13804 | 2014-06-03 07:00:29 |          1850 |        15464 | 07:00:29 | 2014-06-03
 1228 | 2014-06-01 07:00:40 |           981 |        11480 | 07:00:40 | 2014-06-01
13805 | 2014-06-03 07:00:41 |          1561 |        15469 | 07:00:41 | 2014-06-03
 7421 | 2014-06-02 07:00:41 |          1577 |        13069 | 07:00:41 | 2014-06-02
 1229 | 2014-06-01 07:00:52 |          1206 |        11484 | 07:00:52 | 2014-06-01
 7422 | 2014-06-02 07:00:53 |          1399 |        13073 | 07:00:53 | 2014-06-02
13806 | 2014-06-03 07:00:53 |          1545 |        15474 | 07:00:53 | 2014-06-02
select i1.* from InverterReadings i1
LEFT JOIN InverterReadings i2 
            on i2.myDate=i1.myDate and i1.myTime<i2.myTime
where i2.id IS NULL;
SELECT 
  rec.id, 
  rec.time_stamp, 
  rec.curr_property, 
  rec.day_property, 
  rec.mytime, 
  rec.mydate
FROM 
(
  SELECT 
    admin_tmp.*,
    DATE(time_stamp) AS mydate,
    TIME(time_stamp) AS mytime
  FROM admin_tmp
  WHERE TIME(time_stamp) >= '07:00:00' AND TIME(time_stamp) <= '07:59:59'
) as rec
JOIN
(
  SELECT 
    DATE(time_stamp) as mydate,
    MAX(TIME(time_stamp)) as mytime
  FROM admin_tmp
  WHERE TIME(time_stamp) >= '07:00:00' AND TIME(time_stamp) <= '07:59:59'
  GROUP BY DATE(time_stamp)
) as max_times ON max_times.mydate = rec.mydate and max_times.mytime = rec.mytime
ORDER BY rec.mytime LIMIT 15;