Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Bigquery:przeszukuj wiele tabel i agreguj z first_seen i last_seen

Najpierw połączyłbym tabele (w BigQuery składnia dla unii to przecinek). Następnie są dwa podejścia:

  1. Użyj funkcji analitycznych FIRST_VALUE i 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. Użyj agregacji MIN/MAX na sygnaturze czasowej, aby znaleźć pierwszą/ostatnią, a następnie dołączyć z powrotem do tych samych tabel.
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. Co oznacza „unsigned” w MySQL i kiedy go używać?

  2. Zapisz tablicę w bazie danych lub utwórz inne kolumny

  3. FORCE INDEX w MySQL - gdzie go umieścić?

  4. mysql agregat UDF (funkcja zdefiniowana przez użytkownika) w C

  5. Jak połączyć się z MySQL na Amazon EC2 z poziomu Windows?