You can use a self-join (to get the Checkout time for any Checkin row); with a subquery (to remove multiple checkout rows, if the same user checks in/out multiple times).
This one assumes that you only have one day's worth of data in the table, and it prints multiple rows for each session (of checkin/checkout):
SELECT
CI.USERID,
format(dateadd('n',
datediff('n', CI.CHECKTIME, CO.CHECKTIME),
#01/01/1900#),'hh:nn') as HHMM
FROM MyTbl CI
inner join
MyTbl CO
ON CO.USERID=CI.USERID
WHERE
CO.CHECKTIME >= CI.CHECKTIME
AND CO.CHECKTYPE = 'O'
AND CI.CHECKTYPE = 'I'
AND NOT EXISTS
(SELECT *
FROM MyTbl COO
WHERE COO.USERID=CO.USERID
AND COO.CHECKTIME>=CI.CHECKTIME
AND COO.CHECKTYPE='O'
AND COO.CHECKTIME < CO.CHECKTIME
);
The addition to 1900-01-01 is done to turn the minutes found into a datetime value, so that I could use the format function to show in the format you want.