2016-09-14 5 views

答えて

2

から参照このコード

SELECT 
    A.row, 
    A.issue.updated_at, 
(B.issue.updated_at - A.issue.updated_at) AS timedifference 
FROM [icxmedia-servers:icx_metrics.gh_zh_data_production] A 
INNER JOIN [icxmedia-servers:icx_metrics.gh_zh_data_production] B 
    ON B.row = (A.row + 1) 
WHERE issue.number==6 and issue.name=="archer" 
ORDER BY A.requestid ASC 

を使用しています。 analytic functions with standard SQL in BigQueryのドキュメントは、分析関数の仕組みとその構文について説明しています。あなたは順序が列yによって決定されるx値の連続的な違いを取るしたい場合の例として、あなたができる:BigQueryの中でこれを実行するための

WITH T AS (
    SELECT 
    x, 
    y 
    FROM UNNEST([9, 3, 4, 7]) AS x WITH OFFSET y) 
SELECT 
    x, 
    x - LAG(x) OVER (ORDER BY y) AS x_diff 
FROM T; 

注意を、あなたは「使用レガシーのチェックを外す必要があります標準SQLを有効にするには、[Show Options]の下の[SQL]ボックスをクリックします。 WITH T句は、この例のデータを設定するだけです。

SELECT 
    row, 
    issue.updated_at, 
    issue.updated_at - LAG(issue.updated_at) OVER (ORDER BY issue.updated_at) AS timedifference 
FROM `icxmedia-servers.icx_metrics.gh_zh_data_production` 
WHERE issue.number = 6 
    AND issue.name = "archer" 
ORDER BY requestid ASC; 

あなただけの単一発行番号のupdated_at外の相違を決定したい場合は、あなたにもPARTITION BY句を使用することができます。あなたの特定のケースについては

は、おそらくのようなクエリを望みます。たとえば、次のように時間差AS LAG(issue.updated_at)OVER(issue.updated_at BY ORDER) - - - issue.updated_at

SELECT 
    row, 
    issue.name, 
    issue.number, 
    issue.updated_at, 
    issue.updated_at - LAG(issue.updated_at) OVER (
     PARTITION BY issue.number 
     ORDER BY issue.updated_at) AS timedifference 
FROM `icxmedia-servers.icx_metrics.gh_zh_data_production` 
ORDER BY requestid ASC; 
+0

は、私はあなたの暗示に等しい何かをしようとした私のクエリではなく、私は、エラーを受信 - ミッシング関数を解析式で使用します。可能性についてあなたは正しいのですか? –

+0

あなたが達成しようとしているものの例で、別の質問を作成してください。 –

+0

私は行間に違いを得ようとしていますが、値は整数でありタイムスタンプではありません。 LAG関数は単独で問題なく動作します。しかし、あなたが示唆した減算をしようとすると、私は警告を受け取ります - アナリシス表現の機能がありません。異なる列と値で同じ質問です。 –

関連する問題