سؤال

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

لدينا جدول يسمى التواجد وجدول يسمى OccurenceBuckets حيث كل تواجد هو إشارة دلو التي تم تعيين ذلك. سابقا كان هذا في اتجاه واحد إشارة لكن لأسباب مختلفة فقد قررنا إضافة مرجع مرة أخرى من OccurrenceBucket إلى حدوث الأول (الأول في الوقت المناسب، وهذا هو). الجداول تبدو الآن مثل هذا:

CREATE TABLE Occurrence
  OccurrenceID uniqueidentifier,
  OccurrenceBucketID uniqueidentifier,
  OccurrenceTime datetime,
  OccurrenceMessage nvarchar
  ...other meta data...

CREATE TABLE OccurrenceBucket
  OccurrenceBucketID uniqueidentifier,
  ...other meta data...
  FirstOccurrenceID uniqueidentifier,
  FirstOccurrenceTime datetime,
  FirstOccurrenceMessage nvarchar

وأنا أبحث عن وسيلة لتحديد التواجد الأول ينتمون إلى دلو وتعيين FirstOccurrenceID، FirstOccurrenceTime وFirstOccurrenceMessage مع القيم من هذا التواجد الأول لجميع بلدي occurrencebuckets.

هل أي واحد منكم خبراء SQL-فو هناك لديهم الوقت لمساعدتي، كل محاولاتي ينظر لإنتاج مجموعة غير صحيحة أو غير كاملة من الأحداث.

هل كانت مفيدة؟

المحلول

ويمكنك أن تجرب هذا

DECLARE @Occurrence TABLE(
        OccurrenceID INT,
        OccurrenceBucketID INT,
        OccurrenceTime DATETIME,
        OccurrenceMessage VARCHAR(MAX)
)

INSERT INTO @Occurrence (OccurrenceID,OccurrenceBucketID,OccurrenceTime,OccurrenceMessage)  
SELECT 1, 1, '01 Jan 2009', 'A'
INSERT INTO @Occurrence (OccurrenceID,OccurrenceBucketID,OccurrenceTime,OccurrenceMessage)  
SELECT 2, 1, '02 Jan 2009', 'B'
INSERT INTO @Occurrence (OccurrenceID,OccurrenceBucketID,OccurrenceTime,OccurrenceMessage)  
SELECT 3, 1, '03 Jan 2009', 'C'


INSERT INTO @Occurrence (OccurrenceID,OccurrenceBucketID,OccurrenceTime,OccurrenceMessage)  
SELECT 4, 2, '04 Jan 2009', 'D'
INSERT INTO @Occurrence (OccurrenceID,OccurrenceBucketID,OccurrenceTime,OccurrenceMessage)  
SELECT 5, 2, '05 Jan 2009', 'E'
INSERT INTO @Occurrence (OccurrenceID,OccurrenceBucketID,OccurrenceTime,OccurrenceMessage)  
SELECT 6, 2, '06 Jan 2009', 'F'

SELECT * FROM @Occurrence

DECLARE @OccurrenceBucket TABLE(
        OccurrenceBucketID INT,
        FirstOccurrenceID INT,
        FirstOccurrenceTime DATETIME,
        FirstOccurrenceMessage VARCHAR(MAX)
)

INSERT INTO @OccurrenceBucket (OccurrenceBucketID) SELECT 1
INSERT INTO @OccurrenceBucket (OccurrenceBucketID) SELECT 2

SELECT * FROM @OccurrenceBucket


UPDATE  @OccurrenceBucket
SET     FirstOccurrenceID = OccurrenceID,
        FirstOccurrenceTime = OccurrenceTime,
        FirstOccurrenceMessage = OccurrenceMessage
FROM    @OccurrenceBucket oc INNER JOIN
        (
            SELECT  o.*
            FROM    @Occurrence o INNER JOIN
                    (
                        SELECT  OccurrenceBucketID,
                                MIN(OccurrenceID) FirstOccurrenceID
                        FROM    @Occurrence
                        GROUP BY OccurrenceBucketID
                    ) Mins ON o.OccurrenceID = mins.FirstOccurrenceID
        ) Vals ON oc.OccurrenceBucketID = Vals.OccurrenceBucketID

SELECT * FROM @OccurrenceBucket

وتحرير:

UPDATE  @OccurrenceBucket 
SET     FirstOccurrenceID = OccurrenceID, 
        FirstOccurrenceTime = OccurrenceTime, 
        FirstOccurrenceMessage = OccurrenceMessage 
FROM    @OccurrenceBucket oc INNER JOIN 
        ( 
                SELECT  o.* 
                FROM    @Occurrence o INNER JOIN 
                                ( 
                                        SELECT  OccurrenceBucketID, 
                                                        MIN(OccurrenceTime) FirstOccurrenceTime 
                                        FROM    @Occurrence 
                                        GROUP BY OccurrenceBucketID 
                                ) Mins ON o.OccurrenceTime = mins.FirstOccurrenceTime 
        ) Vals ON oc.OccurrenceBucketID = Vals.OccurrenceBucketID 

نصائح أخرى

حسنا، للعثور على التواجد الأول في دلو لا ينبغي أن العمل التالية؟

SELECT TOP 1
  OccurranceID, OccurranceTime, OccurranceMessage
FROM Occurance
WHERE
  OccurranceBucketID = @OccurranceBucketID
ORDER BY
  OccurranceTime ASC

ويمكنك تعيين الحقول عاد إلى المتغيرات ومن ثم تحديث OccurranceBucket وفقا لذلك.

<سوب> NB: "حدوث" لا يوجد لديه "أ" في ذلك

وهذه الإجابة تعتمد على OccurrenceTime يجري فريدة من نوعها لكل الحدوث: -

ضبط

وتحديث OccBuck
OccBuck.FirstOccurrenceID = Occ.OccurrenceID،
OccBuck.FirstOccurrenceTime = Occ.OccurrenceTime،
OccBuck.FirstOccurrenceMessage = Occ.OccurrenceMessage
من
dbo.OccurrenceBucket كما OccBuck
صلة داخلية dbo.Occurrence كما بالخام على OccBuck.OccurrenceBucketID = Occ.OccurrenceBucketID
صلة داخلية (اختر OccurrenceBucketID،
MIN (OccurrenceTime) باسم 'MinOccurrenceTime "
من dbo.Occurrence
مجموعة من OccurrenceBucketID) كما minOcc على Occ.OccurrenceBucketID = minOcc.OccurrenceBucketID و
Occ.OccurrenceTime = minOcc.MinOccurrenceTime

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top