none
Son insert olan kaydı alma RRS feed

  • Soru

  • Merhabalar,

    Kısa ama karışık bir sorum olacak.

    Aşağıdaki sorgu ile gelen sonuçta, Her Mobile number'ın son işlem yapmış kartını nasıl alabilirm?

    Yani mobile numaraları tekil olacak, tekil şartı da en yakın tarihli kayıt olacak? umarım anlatabilmişimdir.

    Bu şartlarda sadece 2 kayıt gelmesi lazım, çünkü iki tane mobile numara var. 

    Çok teşekkürler.

    select 
    a.CARD_REF_NUMBER,
    B.MOBILE_PHONE_NUMBER,
    B.CARD_STATUS_CODE,
    MAX(A.INSERT_DATE) as 'SON_TARIH'

    from PRP.PREPAID_TRANSACTION a (nolock)
    left join PRP.PREPAID_CARD_MASTER b (nolock) on a.CARD_REF_NUMBER=b.CARD_REF_NUMBER AND B.RECORD_STATUS='A'

    where 
    A.TRN_CODE='05'
    AND A.TRN_CODE_DETAIL='00000'
    AND RESPONSE_CODE='00'
    AND A.RECORD_STATUS='A' 
    AND A.TRN_STATUS='N' 
    AND B.MOBILE_PHONE_NUMBER IN ('5356456994','5332716861')


    GROUP BY a.CARD_REF_NUMBER,B.MOBILE_PHONE_NUMBER,B.CARD_STATUS_CODE

    ORDER BY MAX(A.INSERT_DATE) DESC

    --- Gelen sonuç---

    CARD_REF_NUMBER MOBILE_PHONE_NUMBER SON_TARIH
    2019012411110789 5332716861 2019-10-29 21:01:19.600
    2018050811110434 5356456994 2019-09-28 16:26:30.927
    2018010811115010 5356456994 2019-07-23 21:42:32.997
    2019012411110827 5356456994 2019-06-15 19:45:40.380
    2018121411112012 5356456994 2019-02-22 00:08:54.030
    2018081411110059 5356456994 2019-02-20 01:20:20.430
    2019012411110761 5332716861 2019-02-05 19:37:06.567
    2017112011145443 5356456994 2018-02-25 15:09:09.437
    2017080411110233 5356456994 2018-01-10 11:06:02.910

    30 Ekim 2019 Çarşamba 13:33

Tüm Yanıtlar

  • Hocam merhabalar

    2 adet telefon numaramız var ve yanlış anlamadıysam InsertDate alanı son işlemde güncelleniyor.

    Buna göre istediğim şey en son işlem yapmış telefonları listelemek tekrar eden kayıtlardan da kurtulmak 

    Aşağıda ki gibi çalıştırabilir misiniz?

    SELECT DISTINCT
    a.CARD_REF_NUMBER,
    B.MOBILE_PHONE_NUMBER,
    B.CARD_STATUS_CODE,
    A.INSERT_DATE as 'SON_TARIH'
    
    from PRP.PREPAID_TRANSACTION a (nolock)
    left join PRP.PREPAID_CARD_MASTER b (nolock) on a.CARD_REF_NUMBER=b.CARD_REF_NUMBER AND B.RECORD_STATUS='A'
    
    where 
    A.TRN_CODE='05'
    AND A.TRN_CODE_DETAIL='00000'
    AND RESPONSE_CODE='00'
    AND A.RECORD_STATUS='A' 
    AND A.TRN_STATUS='N' 
    AND B.MOBILE_PHONE_NUMBER IN ('5356456994','5332716861')
    
    
    GROUP BY a.CARD_REF_NUMBER,B.MOBILE_PHONE_NUMBER,B.CARD_STATUS_CODE
    
    ORDER BY A.INSERT_DATE DESC

    MAX(A.INSERT_DATE) kısmını tam anlayamadım. Bu alan güncelleniyor mu?

    Basit bir cevap oldu kusura bakmayın. Bir de kod bloklarını metin editöründen Kod Bloğu olarak eklerseniz okunurluk açısından daha güzel olur :)

    Saygılarımla.

    30 Ekim 2019 Çarşamba 13:52
  • Merhaba,

    PRP.PREPAID_TRANSACTION tablosu işlem tablosu demek, yani sürekli olarak oraya yeni işlem kayıtları ekleniyor.

    O yüzden MAX(A.INSERT_DATE) demiştim.

    Max insert demeden de group diye sorgulayınca hata veriyor.

    Yani o tabloda bir sürü card_ref_no olan kayıt var.

    Ekleme: Tekrar eden kayıtlardan kurtulmak evet ama kalacak olan kaydın insert_date'i en büyük olmalı.


    • Düzenleyen ErsinBicer 30 Ekim 2019 Çarşamba 14:10 ekleme
    30 Ekim 2019 Çarşamba 14:00
  • Keske biraz ornek veri verseydiniz :( Bu sekilde yazmak daha zor oluyor.

    select 
    	t.CARD_REF_NUMBER,
    	B.MOBILE_PHONE_NUMBER,
    	B.CARD_STATUS_CODE,
    	t.SON_TARIH
    from PRP.PREPAID_CARD_MASTER b (nolock)
    cross apply (select top(1) CARD_REF_NUMBER, INSERT_DATE 
    	from PRP.PREPAID_TRANSACTION a (nolock)
    	where a.CARD_REF_NUMBER=b.CARD_REF_NUMBER
    	AND A.TRN_CODE='05'
    	AND A.TRN_CODE_DETAIL='00000'
    	AND A.RESPONSE_CODE='00'
    	AND A.RECORD_STATUS='A' 
    	AND A.TRN_STATUS='N' 
    	order by INSERT_DATE desc) t(CARD_REF_NUMBER, SON_TARIH)
    where B.RECORD_STATUS='A' and 
          B.MOBILE_PHONE_NUMBER IN ('5356456994','5332716861');

    Not: Left join anlamsiz, sonra where ile inner join'e zorluyorsunuz.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    • Düzenleyen CetinBasoz 30 Ekim 2019 Çarşamba 14:13
    30 Ekim 2019 Çarşamba 14:12
  • Teşekkürler,

    Ancak bu şekilde de olmuyor, max(insert_date)'i almak zorundayım. O tablo işlem tablosu, mobil numaralara ait en son işlem yapan tek kartı almak istiyorum. Yani her mobil numaraya tek kart gelecek ve insert date'i en yakın olan gelecek. 

    Burada beklediğim sonuç 2 tane kayıt, çünkü iki farklı mobile number var.

    .

    30 Ekim 2019 Çarşamba 14:21
  • Tamam ben farklı bir şey söylemedim zaten. Bu sekilde de olmuyor demek ne demek anlamıyorum. Kod olarak, ornek veri verirseniz bakalım. 


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    30 Ekim 2019 Çarşamba 14:25
  • Merhaba,

    Verdiğiniz sorgu aşağıdak gibi geliyor.  ben sadece 2 tane kayıt gelmesini bekliyorum, 2 tane mobil number var çünkü ve o kayıtların da en yakın insert_date olanı gelmeli. 

    use CardPayment
    
    select 
    a.CARD_REF_NUMBER,
    B.MOBILE_PHONE_NUMBER,
    B.CARD_STATUS_CODE,
    MAX(A.INSERT_DATE)
    from PRP.PREPAID_TRANSACTION a (nolock)
    join PRP.PREPAID_CARD_MASTER b (nolock) on a.CARD_REF_NUMBER=b.CARD_REF_NUMBER AND B.RECORD_STATUS='A'
    
    where 
    
    A.TRN_CODE='05'
    AND A.TRN_CODE_DETAIL='00000'
    AND RESPONSE_CODE='00'
    AND A.RECORD_STATUS='A' 
    AND A.TRN_STATUS='N' 
    AND B.MOBILE_PHONE_NUMBER IN ('5356456994','5332716861')
    
    GROUP BY a.CARD_REF_NUMBER,B.MOBILE_PHONE_NUMBER,B.CARD_STATUS_CODE
    
    ORDER BY MAX(A.INSERT_DATE) DESC
    

    Ben de yukarıdaki gibi yazdım, o da tüm kayıtları getiriyor.  bana sadece iki kayıt gerekiyor. 

    30 Ekim 2019 Çarşamba 14:32
  • Ben Group BY filan demedim, o benim verdigim sorgu degil. Dediğim gibi, kod olarak, ornek veri verirseniz bakalım. Resim kimsenin isine yaramiyor (oturup onları yazmak olmaz yani).


    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    30 Ekim 2019 Çarşamba 14:36
  • Merhaba Çetin Bey,

    Sizin verdiğiniz sorgu sonucu tüm kayıtlar geliyor demek istedim, verdiğim resim görüntüsü de sizin verdiğiniz sorgu sonucu gelen sonuçlardı, ben 2 kayıt bekliyorum o sonuçlarda onu anlatmaya çalıştım.

    Yukarıda verdiğim sorgu örneği benim yazdığım örnekti. ikisinde de aynı sonuç geliyor aslında. ikisinde de 9 kayıt geliyor.

    Ben 2 kayıt gelmesini bekliyorum insert date'i en büyük olan mobil number'ları ve card_ref_number ları  arıyorum.

    30 Ekim 2019 Çarşamba 14:44
  • Anlasamiyoruz, ben kod olarak ornek veri istedikçe, hikaye anlatıyorsunuz. Bizim elinizdeki veriyi tahmin etmemizi bekliyorsunuz. Karanlıkta son atisimi yapıyorum o zaman:

    WITH data
    AS (SELECT a.CARD_REF_NUMBER,
               b.MOBILE_PHONE_NUMBER,
               b.CARD_STATUS_CODE,
               a.Insert_Date,
               MAX(a.Insert_Date) OVER (PARTITION BY b.MOBILE_PHONE_NUMBER ORDER BY INSERT_DATE DESC) AS SON_TARIH
        FROM PRP.PREPAID_TRANSACTION a (NOLOCK)
            INNER JOIN PRP.PREPAID_CARD_MASTER b (NOLOCK)
                ON a.CARD_REF_NUMBER = b.CARD_REF_NUMBER
                   AND b.RECORD_STATUS = 'A'
        WHERE a.TRN_CODE = '05'
              AND a.TRN_CODE_DETAIL = '00000'
              AND RESPONSE_CODE = '00'
              AND a.RECORD_STATUS = 'A'
              AND a.TRN_STATUS = 'N'
              AND b.MOBILE_PHONE_NUMBER IN ( '5356456994', '5332716861' ))
    SELECT CARD_REF_NUMBER,
           MOBILE_PHONE_NUMBER,
           CARD_STATUS_CODE,
           SON_TARIH
    FROM data
    WHERE SON_TARIH = Insert_Date;
    



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.

    30 Ekim 2019 Çarşamba 15:13
  • Merhaba,

    Kendi yazdığım sorguyu ve dönen sonucu yukarıda eklemiştim, yanlış anlaşılma için kusura bakmayın.

    Sizin en son verdiğiniz sorgu ile istediğim  sonuç gelmekte. Emekleriniz için teşekkür ederim.


    31 Ekim 2019 Perşembe 07:12
  • Merhaba,

    Kendi yazdığım sorguyu ve dönen sonucu yukarıda eklemiştim, yanlış anlaşılma için kusura bakmayın.

    Sizin en son verdiğiniz sorgu ile istediğim  sonuç gelmekte. Emekleriniz için teşekkür ederim.


    Donen sonucun bana kismen faydası var, bana lazım olan sizin elinizdeki o 2 tablodaki verilerin örnegi, ki nereden ne alınmak isteniyor anlama şansım olsun. Obur turlu, istediğinizi vermeyen bir kod uzerinden karanlıkta atış oluyor.

    Istediginiz olduysa bu soruyu kapatabilir misiniz, lütfen.



    How to create a Minimal, Reproducible Example
    The way to Go.
    World's most advanced open source (object-) relational Database.
    Flutter (for mobile, for web & desktop.


    • Düzenleyen CetinBasoz 31 Ekim 2019 Perşembe 13:19
    31 Ekim 2019 Perşembe 13:18