You should be able to use code similar what is shown below within your job step. The SQL statements are broken apart with comments for explanation. For brevity you could combine them or even make then into a separate scalar function that takes a job identifier and returns a true or false if its the first run.
DECLARE @job_id uniqueidentifier
DECLARE @run_requested_date DATETIME
DECLARE @first_run_today DATETIME
-- Use Tokens in Job Steps
-- https://msdn.microsoft.com/en-us/library/ms175575.aspx
-- Within your SQL Agent job step you can use this tokenized
-- statement to get the job_id.
--SET @job_id = CONVERT(uniqueidentifier, $(ESCAPE_NONE(JOBID)))
-- You can use this statement instead, but it will break if the
-- job name is changed and you forget to update the [name]
-- parameter below ('Test' is the job name in this example)
SELECT @job_id = job_id
FROM msdb.dbo.sysjobs
WHERE name = 'Test'
-- Debug statement
PRINT 'job_id = ' + CONVERT(VARCHAR(255), @job_id)
-- Get the scheduled run time for this currently
-- executing job (can alternatively use the
-- start_execution_date column instead)
SELECT @run_requested_date = run_requested_date
FROM msdb.dbo.sysjobactivity
WHERE job_id = @job_id
-- Debug statement
PRINT 'run_requested_date = ' + CONVERT(VARCHAR(50), @run_requested_date, 126)
-- For the given job, find any job history row that
-- was successfully execute at an earlier time on
-- this date.
--
-- The msdb.dbo.agent_datetime() function is a built-in
-- function that will values from the separate date and time
-- columns in the job history table and convert them to a
-- single datetime value.
SELECT @first_run_today = msdb.dbo.agent_datetime(run_date, run_time)
FROM msdb.dbo.sysjobhistory
WHERE JOB_ID = @job_id
AND run_status = 1 -- Successful
AND run_date = CONVERT(VARCHAR(10), @run_requested_date, 112) -- YYYYMMDD format compare
AND msdb.dbo.agent_datetime(run_date, run_time) < @run_requested_date
-- Debug statement
PRINT 'first_run_today = ' + CONVERT(VARCHAR(50), @first_run_today, 126)
-- If the first_run_today variable is null then
-- that means for the current date we did not
-- any successful runs of this job before now.
IF @first_run_today IS NULL
BEGIN
PRINT 'This *is* the first run.'
-- First run statements go here.
END
ELSE
BEGIN
PRINT 'This is *not* the first run.'
-- Non first run statements go here.
END