2015-08-26 4 views
0

У меня есть две таблицы, датчик и sensor_desc. Я хочу восстановить данные sensor.date и sensor_desc.location из обеих таблиц, где последний вставлен sensor_id.SQL-оператор, содержащий две таблицы

Я пробовал этот код, который не работает.

 cur = con.cursor() 
     cur.execute("Select sensor_id from sensor order by date desc limit 1") 
     con.commit() 
     last= cur.fetchall() 
     print '%s' %last 
     cur1= con.cursor() 
     cur.execute("Select sensor.date, sensor_desc.location from sensor, sensor_desc where sensor.sensor_id= %s AND sensor_desc.sensor_id=%s",(last, last)) 
     con.commit() 
     lastseen = cur1.fetchall() 
     print '%s'%lastseen 

датчик

+-----------+---------------------+-------+ 
| sensor_id | date    | value | 
+-----------+---------------------+-------+ 
| 12345  | 2015-08-17 10:16:41 | NULL | 
| 12345  | 2015-08-17 10:17:29 | NULL | 
| 12345  | 2015-08-17 10:18:06 | NULL | 
| 12345  | 2015-08-17 13:28:55 | 1 | 
| 12345  | 2015-08-17 13:29:49 | 1 | 
+-----------+---------------------+-------+ 

sensor_desc

+-----------+--------------------+-------------+ 
| sensor_id | description  | location | 
+-----------+--------------------+-------------+ 
| 12341  | Motion Sensor  | Kitchen  | 
| 12342  | Motion Sensor  | Toilet  | 
| 12343  | Motion Sensor  | Living Room | 
| 12344  | Motion Sensor  | BedRoom  | 
| 12345  | Panic Button  | NULL  | 
| 12346  | Temperature Sensor | NULL  | 
| 12347  | CO2 Sensor   | NULL  | 
+-----------+--------------------+-------------+ 

Here is the fiddle

+0

Как это работает? Что вы ожидаете от результата? Что вы получаете в результате? Пожалуйста, отредактируйте этот вопрос и добавьте эту информацию. –

+1

Пожалуйста, отметьте язык, который вы используете. Мои мысли теперь состоят в том, что вам нужно СОЕДИНЯТЬ две таблицы вместе, ORDER BY sensor_id в порядке убывания, а затем ограничить одну запись. –

+0

@Tyra, пожалуйста, прекратите удаление других вопросов. Я подготовил ответ для того, чтобы сохранить адрес XBee в таблице базы данных, но вы удалили его (дважды!), Прежде чем я смог его отправить. – tomlogic

ответ

2

Я думаю, что совмещая два запроса получает это:

select sensor.date, sensor_desc.location 
from sensor, sensor_desc 
where sensor.sensor_id = sensor_desc.sensor_id 
order by sensor.date desc 
limit 1 

Многие люди здесь предпочтут использовать синтаксис inner join, но я хотел бы подчеркнуть, насколько вы были близки к чему-то, что сработало.

1

Оператор SQL, который вы должны запустить, должен соединяться между двумя таблицами, упорядочиваться по дате, а затем захватывать только первую запись.

Я использую INNER JOIN здесь только потому, что вы можете опустить предложение WHERE таким образом (я чувствую, что это более читаемо).

SELECT sensor.date, sensor_desc.location 
FROM sensor 
    INNER JOIN sensor_desc ON sensor.sensor_id = sensor_desc.sensor_id 
ORDER BY sensor.date DESC 
LIMIT 1 
Смежные вопросы