1. Lighthouse

Level 7 · Debug: the newest hires list is wrong

The request

From Nicole Bennett, HR Business Partner

“The 'five newest hires' list on the HR dashboard used to work. Since someone added job titles to it, it shows people who joined years ago, like a support lead hired in 2021. The numbers look off. Can you fix it?”

Your goal

Fix the query. From employees, return employee_id, first_name, last_name, title and hire_date for the 5 most recently hired employees. Sort by hire_date descending, then by employee_id descending when hire dates tie. Return exactly 5 rows.

  • Read from the employees tablenot done yet
  • Show exactly employee_id first_name last_name title hire_datenot done yet
  • 5 rows, sorted as askednot done yet

Your query

SQL

Loading the editor…

    ResultPreview of employees · press Run to see yours
    Preview of employees
    employee_idfirst_namelast_namedepartmenttitle
    1CatherineHaleExecutiveChief Executive Officer
    2RobertKimExecutiveChief Operating Officer
    3MeganCollinsSalesHead of Sales
    4ChloeGutierrezSalesAccount Executive

    Mote checks your result

    Press Run. Each row that matches the goal becomes a firefly in your lantern.

    Tables

    Harbor & Pine store data, ready to query.

    employees60 rows · 8 columns
    • employee_idinteger
    • first_namevarchar
    • last_namevarchar
    • departmentvarchar
    • titlevarchar
    • manager_idinteger
    • hire_datedate
    • salaryinteger
    First 5 rows of employees
    employee_idfirst_namelast_namedepartmenttitlemanager_idhire_datesalary
    1CatherineHaleExecutiveChief Executive OfficerNULL2016-03-01285000
    2RobertKimExecutiveChief Operating Officer12017-01-09235000
    3MeganCollinsSalesHead of Sales12018-04-16172000
    4ChloeGutierrezSalesAccount Executive32020-01-2172000
    5FrankBellSalesAccount Executive32023-05-2173000
    customers2,018 rows · 9 columns
    • customer_idinteger
    • first_namevarchar
    • last_namevarchar
    • emailvarchar
    • cityvarchar
    • statevarchar
    • signup_datedate
    • segmentvarchar
    • referral_sourcevarchar
    First 5 rows of customers
    customer_idfirst_namelast_nameemailcitystatesignup_datesegmentreferral_source
    1OwenHudsonowen.hudson@icloud.comSan FranciscoCA2022-06-02consumersearch
    2DouglasMendozadmendoza69@gmail.comAtlantaGA2022-06-02consumerNULL
    3HenryBrookshbrooks@lakesidecafe.comLos AngelesCA2022-06-04businessNULL
    4BrianGrahambgraham@bluecedarhomes.comSeattleWA2022-06-06businesspinterest
    5KyleJimenezkjimenez27@yahoo.comIndianapolisIN2022-06-07consumerNULL
    products120 rows · 8 columns
    • product_idinteger
    • namevarchar
    • categoryvarchar
    • subcategoryvarchar
    • unit_pricedecimal
    • unit_costdecimal
    • launched_ondate
    • is_activeboolean
    First 5 rows of products
    product_idnamecategorysubcategoryunit_priceunit_costlaunched_onis_active
    101Vale Velvet LoveseatFurnitureSofas1659.00NULL2023-09-11true
    102Alder Oak Coffee TableFurnitureTables919.00503.502024-05-16true
    103Orchard Rattan Dining ChairFurnitureChairs789.00429.872023-05-27true
    104Upland Oak BookcaseFurnitureStorage429.00214.702022-12-20true
    105Avery Leather Bed FrameFurnitureBeds449.00232.702021-08-31true
    orders12,000 rows · 7 columns
    • order_idinteger
    • customer_idinteger
    • order_datetimestamp
    • statusvarchar
    • channelvarchar
    • shipping_feedecimal
    • coupon_codevarchar
    First 5 rows of orders
    order_idcustomer_idorder_datestatuschannelshipping_feecoupon_code
    10011252023-01-01 20:51:19completedweb0.00NULL
    10021562023-01-02 07:58:46completedweb0.00NULL
    1003222023-01-02 10:25:27completedmarketplace4.99WELCOME10
    1004482023-01-02 11:21:51completedmarketplace4.99WELCOME10
    1005822023-01-02 11:43:36completedweb0.00WELCOME10
    order_items30,338 rows · 6 columns
    • order_item_idinteger
    • order_idinteger
    • product_idinteger
    • quantityinteger
    • unit_pricedecimal
    • discount_pctdecimal
    First 5 rows of order_items
    order_item_idorder_idproduct_idquantityunit_pricediscount_pct
    11001121931.990.00
    21001154311.990.00
    31002154411.990.00
    410021941149.000.00
    51002193219.990.00
    returns1,673 rows · 5 columns
    • return_idinteger
    • order_item_idinteger
    • returned_ondate
    • reasonvarchar
    • refund_amountdecimal
    First 5 rows of returns
    return_idorder_item_idreturned_onreasonrefund_amount
    1142023-01-10damaged83.69
    2422023-01-10wrong_item19.99
    31052023-01-14wrong_item10.99
    4242023-01-16changed_mind26.99
    51262023-01-16late20.99
    web_sessions40,000 rows · 7 columns
    • session_idinteger
    • customer_idinteger
    • started_attimestamp
    • devicevarchar
    • sourcevarchar
    • pages_viewedinteger
    • convertedboolean
    First 5 rows of web_sessions
    session_idcustomer_idstarted_atdevicesourcepages_viewedconverted
    1NULL2023-01-01 23:02:24mobilepaid1false
    2182023-01-01 15:07:49desktoppaid1false
    3NULL2023-01-01 16:55:46desktopdirect7false
    4NULL2023-01-01 12:43:28mobileorganic3false
    5NULL2023-01-01 13:06:21mobilesocial2false
    marketing_spend3,276 rows · 3 columns
    • spend_datedate
    • channelvarchar
    • amountdecimal
    First 5 rows of marketing_spend
    spend_datechannelamount
    2023-01-01paid492.99
    2023-01-01email37.38
    2023-01-01social200.53
    2023-01-02paid709.13
    2023-01-02email64.13

    The lesson

    Nothing in this query errors, and it still returns five people with titles and dates. The bug is in two characters: 4 and 1.

    What a number in ORDER BY means

    ORDER BY 4 sorts by the fourth column of the SELECT list, whatever that column is. The original query selected employee_id, first_name, last_name, hire_date, so 4 was the hire date. Then title was added before hire_date, the SELECT list shifted, and 4 now points at title. Sorting titles from Z to A puts the Warehouse Manager first, then the Support Team Lead and three Support Specialists, regardless of when they joined.

    The fix is to name what you sort by:

    SELECT employee_id, first_name, last_name, title, hire_date
    FROM employees
    ORDER BY hire_date DESC, employee_id DESC
    LIMIT 5;

    The list now starts with Helen Parker (employee 36) and Charles Ruiz (employee 21), both hired on 2025-10-31. The tie-breaker employee_id DESC puts 36 before 21, and every run returns the same five.

    How to spot it

    • The sort column in the result is not in order. Here hire_date jumps around, while title is perfectly sorted. That tells you which column the database actually used.
    • The query was recently edited, and only the SELECT list changed. Positional references are the first suspect.
    • The ticket says “it used to work”. Something changed, so compare the old and new versions line by line before rewriting anything.

    Common mistakes

    • Replacing 4 with 5. Correct today, broken again after the next added column.
    • Removing the tie-breaker. Two people share the newest hire date, so without it their order is not guaranteed.
    • Fixing the ORDER BY but not the tie-breaker. 1 DESC still points at employee_id today, but it has the same weakness: name it, employee_id DESC, so the next edit to the SELECT list cannot move it either. Named columns also make the query readable without counting.

    In SQL Server

    Positional ORDER BY behaves the same there, so the same fix applies. The top five uses TOP:

    SELECT TOP 5 employee_id, title, hire_date
    FROM employees
    ORDER BY hire_date DESC, employee_id DESC;

    Pick what may run on this site. You can change this any time from "Cookie settings" at the bottom of every page.