나는 항공기 변속기로 가득 찬 테이블 스 퀴터가 있습니다. 활성이라고하는 내 뷰는 고유 식별자 (hex_ident) 목록을 반환하고 d_active_hex 열에 넣습니다. 이 뷰에서 테이블과 조인하고 각 활성 hex_ident에 대한 lat, lon, alt 데이터를 포함하는 최신 전송을 반환하려고합니다. 내 활성 뷰가 제대로 작동하지만 두 번째 뷰는 활성 hex_idents 수를 포함하지만 반드시 그 수를 포함 할 필요는없는 여러 개가 있어야한다는 것을 알고있을 때 하나의 항목 만 반환합니다. 여기에 요청이 있습니다.
cur.execute("""
CREATE VIEW IF NOT EXISTS activepos AS
SELECT hex_ident,max(parsed_time),lat,lon,altitude
FROM squitters JOIN active
ON squitters.hex_ident = active.d_hex_ident AND transmission_type = 3;
""")
현재 Python의 목록에 active라는 뷰의 결과를 추가 한 다음 목록을 반복하고 다음과 같이 각 목록 항목에 대해 별도의 요청을합니다.
SELECT hex_ident,max(parsed_time),lat,lon,altitude
FROM squitters
WHERE hex_ident = ? AND transmission_type = 3
예상되는 결과를 생성하지만 비효율적으로 보이며 오히려 코드를 단순화하고 동시에 SQL에서 수행하는 방법을 배우고 싶습니다. 혼란스러워하면 max (parsed_time)가 문제인 것 같습니다. 왜냐하면 모든 전송에서 최신 전송을 선택하고 각 hex_ident에 대한 최신 전송을 선택하지 않고 내가 원하는 것을 달성하는 방법을 모르기 때문입니다.
어떤 아이디어?
나는 당신이 다음으로 그룹화하고 싶다고 생각합니다 hex_ident
.
CREATE VIEW IF NOT EXISTS activepos AS
SELECT s.hex_ident, MAX(parsed_time) parsed_time, lat, lon, altitude
FROM squitters s JOIN active a
ON s.hex_ident = a.d_hex_ident
WHERE transmission_type = 3
GROUP BY s.hex_ident
또한 열 이름을 포함하는 테이블 이름 / 별칭으로 모든 열 이름을 규정해야합니다. 내 코드에서 테이블의 별칭을 식별 할 수없는 모든 열을 정규화하지 않은 채로 두었습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다