1

Google Sheets SQL-ish Query関数を使用して、多数のスプレッドシートのデータを要約しています。これは、ゆっくりではありますが、何年もうまく機能しています。

今日、いくつかのクエリで問題が発生しています。特に、ソース データの日付を と比較するクエリで問題が発生していますTODAY()

実例として、偽のデータで問題を再現するために使用した共有スプレッドシートへのリンクを次に示します。

編集: AdamL の提案により、例が更新されました。

ここに画像の説明を入力

ソース データの範囲A1:D6は で、列は「シリアル番号」、「タイプ」、「場所」、「保証期限」です。最後の列は日付です。

この関数は、A9すべてのデータを要約します。

=query(A1:D6,"select B, count(A) group by B pivot C")

...そのようです:

=クエリ(A1:D6,

つまりね。andを使用してフィルタリングしようとするWHEREDATE()、クエリが完全に壊れているようです。私が欲しいのは、上記のようなテーブルですが、列Dに過去の日付を持つデータ行のみが含まれています。

=query(A1:D6,"select B, count(A) where D < now() group by B pivot C")

=クエリ(A1:D6,

フィルターを日付を含まないものに変更すると、期待される出力が得られます。

=クエリ(A1:D6,

これを取得して、必要な要約を取得するにはどうすればよいですか?

4

1 に答える 1

3

now()スカラー関数は datetime 値を返し、ソース データに日付値があります。残念ながら、この 2 つの比較は失敗します。回避策は、now() を日付値に変換することです。

=QUERY(A1:D6;"select B, count(A) where D < toDate(now()) group by B pivot C")


余談ですが、QUERY 関数には制限 (バグ?) があり、now() スカラー関数は (必然的に) スプレッドシートのタイム ゾーンで動作しません。これを変更する方法はないようです。行動。now() スカラー関数は常に現在の時刻を太平洋夏時間 (米国西海岸など) で返すと思います。したがって、私にとって、現在オーストラリアのブリスベンでは、QUERY select 句で使用される toDate(now()) は昨日の日付を返します。

より安全な方法は、スプレッドシート関数を使用して今日の日付を生成し、それを QUERY 句に連結することです。

=QUERY(A1:D6;"select B, count(A) where D < date '"&TEXT(GoogleClock();"yyyy-MM-dd")&"' group by B pivot C")

于 2013-04-22T22:23:10.787 に答える