منتدى فيجوال بيسك لكل العرب | منتدى المبرمجين العرب

نسخة كاملة : طلب كود لاستعلام الاسم واخر سنة اشتراك
أنت حالياً تتصفح نسخة خفيفة من المنتدى . مشاهدة نسخة كاملة مع جميع الأشكال الجمالية .
السلام عليكم

لدي قائمة بها
اسم المشترك وقيمة الاشتراك وسنة الاشتراك

اريد التعديل على كود لاستعلام لجلب الاسم واخر سنة اشتراك

مثال على ذلك invoice
name ........     ID  .........   price.......   year
2022 ....... 25 ......... Mohammed   ...... 001
2022 .........25 ........ Ali ....... 002
2023 ........ 25......... Ahmed ...... 003
2023 ......... 25 ....... Mohammed ..... 001
2023 ......... 25 ........ Ali ....... 002
2024 ........ 25 ......... Mohammed ..... 001

النتيجة المطلوبة
2024 ...... 25 ....... Mohammed ...... 001
2023 ....... 25 ...... Ali ........ 002
2023 ....... 25 ...... Ahmed ....... 003


كود :
Try
               SQLstr = "SELECT MAX(year)FROM list WHERE ID LIKE '@ID'"
               If Me.BindingContext(DataSet1, "list").Count = 0 Then
                   MsgBox("لا توجد نتائج  , تأكد من وجود إيصالات مخزنة بالمنظومة ")
                   Exit Sub
               End If
           Catch ex As Exception

           End Try
قمت بالتعديل على الكود ولكن في خطأ عند التنفيذ

كود :
Try

               SQLstr = "SELECT * FROM invoice where exists ( select * from invoice high where high.ID = invoice.ID and high.year > invoice.year)"
               

               If Me.BindingContext(DataSet1, "invoice").Count = 0 Then
                   MsgBox("لا توجد نتائج  , تأكد من وجود إيصالات مخزنة بالمنظومة ")
                 
                   'Exit Sub
               End If
           Catch ex As Exception

           End Try
و عليكم السلام


لتنفيذ الاستعلام الذي يعرض آخر سنة اشتراك لكل مشترك بناءً على الـ ID، يمكنك استخدام الاستعلام التالي في SQL للحصول على النتيجة المطلوبة:

PHP كود :
SELECT IDnameMAX(year) AS last_year
FROM invoice
GROUP BY ID
name
ORDER BY last_year DESC 




PHP كود :
Try
    ' استعلام SQL لجلب اسم المشترك وآخر سنة اشتراك له
    Dim SQLstr As String = "SELECT ID, name, MAX(year) AS last_year FROM invoice GROUP BY ID, name ORDER BY last_year DESC"
    
    ' 
إنشاء اتصال بقاعدة البيانات
    Using conn 
As New SqlConnection("YourConnectionStringHere")
        conn.Open()
        
        
' إنشاء SqlCommand لتنفيذ الاستعلام
        Using cmd As New SqlCommand(SQLstr, conn)
            ' 
إنشاء SqlDataAdapter لملء البيانات
            Using adapter 
As New SqlDataAdapter(cmd)
                ' إنشاء DataTable لتخزين النتائج
                Dim dt As New DataTable()
                
                ' 
ملء الـ DataTable بالبيانات من الاستعلام
                adapter
.Fill(dt)
                
                
' التحقق من وجود نتائج
                If dt.Rows.Count = 0 Then
                    MsgBox("لا توجد نتائج  , تأكد من وجود إيصالات مخزنة بالمنظومة")
                    Exit Sub
                End If
                
                ' 
عرض النتائج في DataGridView أو أي عنصر آخر
                
' على سبيل المثال، إذا كنت تريد عرض البيانات في DataGridView:
                DataGridView1.DataSource = dt
            End Using
        End Using
    End Using
Catch ex As Exception
    ' 
عرض رسالة خطأ في حال حدوث استثناء
    MsgBox
("حدث خطأ: " ex.Message)
End Try 
مثال عملي على السيكوال سيرفر
كود :
CREATE DATABASE Test
GO
USE Test
go
CREATE TABLE Subscribers (
  SubscriberID INT PRIMARY KEY,
  EmployeeName NVARCHAR(255),
  SubscriptionYear INT
);
go
INSERT INTO Subscribers (SubscriberID, EmployeeName, SubscriptionYear) VALUES
(1,N'أحمد', 2020),(10,N'أحمد', 2021),(11,N'أحمد', 2022),(12,N'أحمد', 2023),(13,N'أحمد', 2024),(14,N'أحمد', 2025),
(2,N'خالد', 2019),(21,N'خالد', 2020),(22,N'خالد', 2021),(26,N'خالد', 2022),(23,N'خالد', 2023),(24,N'خالد', 2024),
(3,N'فاطمة', 2022),(31,N'فاطمة', 2023),(32,N'فاطمة', 2024),(33,N'فاطمة', 2025),(34,N'علي', 2018),
(4,N'علي', 2019),(41,N'علي', 2023),(42,N'علي', 2024),
(5,N'سارة', 2021),(51,N'سارة', 2022),
(6,N'محمد', 2022),(61,N'محمد', 2023),(62,N'محمد', 2024),(63,N'محمد', 2025);

GO
WITH LatestYear AS (
  SELECT MAX(SubscriptionYear) AS MaxYear
  FROM Subscribers
),
RankedSubscriptions AS (
  SELECT
      SubscriberID,
      EmployeeName,
      SubscriptionYear,
      RANK() OVER (PARTITION BY SubscriberID ORDER BY SubscriptionYear DESC) AS SubscriptionRank
  FROM
      Subscribers
  WHERE SubscriptionYear = (SELECT MaxYear FROM LatestYear) -- استخدام السنة الأحدث من الاستعلام الفرعي
)
SELECT
  SubscriberID,
  EmployeeName,
  SubscriptionYear
FROM
  RankedSubscriptions
WHERE
  SubscriptionRank = 1;