{# Copyright 2022 Curtin University
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# Author: Aniek Roelofs -#}
-- Delete the entries with an older partition date when there are multiple entries with the same identifier.
DELETE
FROM
   `{{ project_id }}.{{ dataset }}.{{ table }}`
WHERE
  CONCAT({{ identifier }}, _PARTITIONDATE) IN (
  -- Only select the entries with an older partition date when there are multiple entries with the same identifier.
  -- Also creates an unique identifier by concatenating the identifier and partition date.
  SELECT
    CONCAT({{ identifier }}, pd)
  FROM (
    -- Assign a row number for each combination of identifier + partition date, older partitions have a higher row number.
    SELECT
      {{ identifier }},
      _PARTITIONDATE AS pd,
      ROW_NUMBER() OVER (PARTITION BY {{ identifier }} ORDER BY _PARTITIONDATE DESC ) AS row_num
    FROM
      `{{ project_id }}.{{ dataset }}.{{ table }}`) t
  WHERE
    row_num>1 )