Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Dapatkan baris pertama/terakhir dari grup ke-n berturut-turut

Anda perlu menggunakan fungsi berjendela ROWNUMBER dalam subkueri,...

sesuatu seperti ini akan membawa Anda ke sana:

ROW_NUMBER() OVER(PARTITION BY Price ORDER BY Claim_Submitted_Date DESC) AS Row 

Inilah pembaruan berdasarkan biola Anda:

DECLARE @material VARCHAR(20)
SET @material = '1271-4303'


SELECT * FROM
(
SELECT  *,
        ROW_NUMBER() OVER(PARTITION BY Material ORDER BY Claim_Submitted_Date ASC) AS rn  
FROM tabdata t2 
WHERE Material = @material
) res
WHERE rn=2

Jika idData bersifat inkremental (dan karenanya kronologis), Anda dapat menggunakan ini:

SELECT * FROM
(
SELECT  *,
        ROW_NUMBER() OVER(PARTITION BY Material ORDER BY idData DESC) AS rn  
FROM tabdata t2 
WHERE Material = @material
) res

Melihat persyaratan terbaru Anda, kami semua bisa memikirkannya (jika saya memahami Anda dengan benar):

DECLARE @MATERIAL AS VARCHAR(9)
SET @MATERIAL = '1271-4303'

SELECT  TOP 1 *
FROM tabdata t2 
WHERE Material = @material
AND PRICE <> (  SELECT TOP 1 Price
                FROM tabdata 
                WHERE Material = @material 
                ORDER BY CLAIM_SUBMITTED_DATE desc)
ORDER BY CLAIM_SUBMITTED_DATE desc

--results
idData  Claim_Submitted_Date        Material    Price
7       2013-11-08 12:16:00.000     1271-4303   18

Berikut adalah biola berdasarkan ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PILIH pemfilteran pernyataan berdasarkan waktu

  2. Apa perbedaan antara prosedur tersimpan dan tampilan?

  3. Pilih n catatan pertama untuk setiap ID berbeda di SQL Server 2008

  4. Masalah menghitung frekuensi item pada T-SQL

  5. SQLBulkCopy dengan Identity Insert di tabel tujuan