title: SQL Query to get latest price
body: <p>I have a table containing prices for a lot of different "things" in a MS SQL 2005 table. There are hundreds of records per thing per day and the different things gets price updates at different times.</p>
  
  <pre><code>ID uniqueidentifier not null,
  ThingID int NOT NULL,
  PriceDateTime datetime NOT NULL,
  Price decimal(18,4) NOT NULL
  </code></pre>
  
  <p>I need to get today's latest prices for a group of things. The below query works but I'm getting hundreds of rows back and I have to loop trough them and only extract the latest one per ThingID. How can I (e.g. via a GROUP BY) say that I want the latest one per ThingID? Or will I have to use subqueries?</p>
  
  <pre><code>SELECT * 
  FROM Thing
  WHERE ThingID IN (1,2,3,4,5,6)
    AND PriceDate &gt; cast( convert(varchar(20), getdate(), 106) as DateTime) 
  </code></pre>
  
  <p><strong>UPDATE:</strong> In an attempt to hide complexity I put the ID column in a an int. In real life it is GUID (and not the sequential kind). I have updated the table def above to use uniqueidentifier.</p>