MySQL - WINDOWS FUNCTION Implementation without Windows function
#this is needed in MySQL version below version 8.0
Scenario:
There are records with seemingly PrimaryKey column (cant make it PK, and so duplicate can come in) , a ForeignKey and createTImestamp --> want to make sure that processing happens only once for the primaryKey - if there are duplicate entries - only way to find it is from the order of create timestamp and if processed already, foreignKey column will have value.
So want to ientify is there was a prior ForeignKey assigned - which means - its already processed --- AND if at all there are 2 entries which are not processed yet, make sure to process just the first one and mark other one as cancelled
SELECT id,
crew_id,
amount,
CASE type
WHEN @curType THEN @curRow := @curRow + 1
ELSE @curRow := 1
END AS rank,
@curType := type AS type
FROM Table1 p
JOIN (SELECT @curRow := 0, @curType := '') r
ORDER BY crew_id, type
### Getting the rank based on execId & createTimestamp
SELECT foreignId, createTimestamp,
CASE executionId
WHEN @curType THEN @curRow := @curRow + 1
ELSE @curRow := 1
END AS rank,
@curType := executionId AS executionId
FROM job_queue_prd p
JOIN (SELECT @curRow := 0, @curType := '') r
WHERE p.executionID in (204626, 204851)
ORDER BY executionId, createTimestamp asc;
### Getting current & prior instanceId & the rank based on execId & createTimestamp
SET @instanceId=0;
SELECT foreignId, createTimestamp, @instanceId prior_foreignId, @foreignId:=foreignId foreignId,
CASE executionId
WHEN @curExecId THEN @curRow := @curRow + 1 ELSE @curRow := 1
END AS rank,
@curExecId := executionId AS executionId
FROM job_queue_prd p
JOIN (SELECT @curRow := 0, @curExecId := '') r
WHERE p.executionID in (204626, 204851)
ORDER BY executionId, createTimestamp asc;