Mysql
 sql >> база данни >  >> RDS >> Mysql

Bigquery:търсене в няколко таблици и агрегиране с first_seen и last_seen

Първо бих обединил таблиците (в BigQuery синтаксисът за обединението е запетая). Тогава има два подхода:

  1. Използвайте аналитични функции FIRST_VALUE и LAST_VALUE.
SELECT id, timestamp_first, timestamp_last, data FROM
(SELECT 
  id,
  timestamp,
  FIRST_VALUE(timestamp) OVER(
    PARTITION BY id
    ORDER BY timestamp ASC
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
  AS timestamp_first,
  LAST_VALUE(timestamp) OVER(
    PARTITION BY id
    ORDER BY timestamp ASC
    ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING)
  AS timestamp_last
FROM table1, table2, table3
  1. Използвайте агрегиране MIN/MAX за времеви печат, за да намерите първо/последно и след това да се присъедините обратно към същите таблици.
SELECT a.id id, timestamp_first, timestamp_last, data FROM
(SELECT id, data FROM table1,table2,table3) a
INNER JOIN
(SELECT 
   id, 
   MIN(timestamp) timestamp_first,
   MAX(timestamp) timestamp_last 
 FROM table1,table2,table3 GROUP BY id) b
ON a.id = b.id



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL за връщане на обединен набор от резултати

  2. Тествайте за NULL в множество колони в MySQL

  3. Изясняване на часовата зона на PHP/MySQL

  4. Синтактична грешка на Mysql при създаване на съхранена процедура

  5. Проблем с връзката с отдалечена база данни на android