현재 스크립트로 정기적으로 업데이트되는 매우 간단한 데이터베이스가 있습니다. 2 열의 평등을 비교하여 결과를 필터링하고 싶습니다. 위치 테이블에 most_recent_updated_time 필드 :다른 테이블의 열을 비교하는 Ruby/Datamapper 쿼리
SELECT devices.site_name, devices.device_name, devices.created_at FROM devices, locations WHERE devices.created_at = locations.most_recent_updated_time AND devices.site_name = locations.site_name;
여기 스크립트는 새 장치 항목을 추가하고`를 업데이트 실행될 때마다 내 datamapper 모델
class Device
include DataMapper::Resource
property :id, Serial
property :device_name, Text, :required => true
property :site_name, Text, :required => true
property :created_at, DateTime
belongs_to :location
end
class Location
include DataMapper::Resource
property :site_name, Text, :required => true, :key => true
property :most_recent_updated_time, DateTime, :required => true
has n, :devices
end
입니다 : 같은 SQL 쿼리가 보일 것이다. 다음은 테이블이 업데이트되는 방법에 대한 예입니다. 스크립트가 실행 된 후 나는 쿼리를 실행하면 스크립트 실행
Devices ╔════╦═════════════╦═══════════╦═══════════════════════════╗ ║ ID ║ Device_Name ║ Site_Name ║ Created_at ║ ╠════╬═════════════╬═══════════╬═══════════════════════════╣ ║ 1 ║ Device1 ║ Dallas ║ 2013-07-23T16:59:12-04:00 ║ ║ 2 ║ Device2 ║ Dallas ║ 2013-07-23T16:59:12-04:00 ║ ║ 3 ║ Device3 ║ Chicago ║ 2013-07-23T16:59:12-04:00 ║ ║ 4 ║ Device4 ║ Dallas ║ 2013-07-24T18:00:00-04:00 ║ ║ 5 ║ Device5 ║ Chicago ║ 2013-07-24T18:00:00-04:00 ║ ╚════╩═════════════╩═══════════╩═══════════════════════════╝ Location ╔═══════════╦═══════════════════════════╗ ║ Site_Name ║ Most_Recent_Updated_Time ║ ╠═══════════╬═══════════════════════════╣ ║ Dallas ║ 2013-07-24T18:00:00-04:00 ║ ║ Chicago ║ 2013-07-24T18:00:00-04:00 ║ ║ Boston ║ 2013-07-24T18:00:00-04:00 ║ ╚═══════════╩═══════════════════════════╝
그래서, 내가 좋아하는 것
Devices ╔════╦═════════════╦═══════════╦═══════════════════════════╗ ║ ID ║ Device_Name ║ Site_Name ║ Created_at ║ ╠════╬═════════════╬═══════════╬═══════════════════════════╣ ║ 1 ║ Device1 ║ Dallas ║ 2013-07-23T16:59:12-04:00 ║ ║ 2 ║ Device2 ║ Dallas ║ 2013-07-23T16:59:12-04:00 ║ ║ 3 ║ Device3 ║ Chicago ║ 2013-07-23T16:59:12-04:00 ║ ╚════╩═════════════╩═══════════╩═══════════════════════════╝ Location ╔═══════════╦═══════════════════════════╗ ║ Site_Name ║ Most_Recent_Updated_Time ║ ╠═══════════╬═══════════════════════════╣ ║ Dallas ║ 2013-07-23T16:59:12-04:00 ║ ║ Chicago ║ 2013-07-23T16:59:12-04:00 ║ ║ Boston ║ 2013-07-23T16:59:12-04:00 ║ ╚═══════════╩═══════════════════════════╝후에는 Device4 및 Device5를 반환합니다. 내가 제대로 질문을 이해한다면
그래, 그것은 오타였습니다. 고침, 고마워! 도움을 주셔서 감사합니다 – Eric