10 lu gruplayarak sql

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
danaci
Üye
Mesajlar: 178
Kayıt: 24 May 2005 01:45

10 lu gruplayarak sql

Mesaj gönderen danaci »

arkadaşlar mrb
elimde personellerin memuriyete ilk başlama tarihleri var. ben bundan hareketle memuriyete giriş tarihlerini 1-10 yıllıkları, 11-20 yıllıkları, 21-30 yıllıkları gruplayacak bir sql cümlesini nasıl yazabilirim.

ilk 1-10 yıllık gruplama için
SELECT mem_ilk_baslama,count(*) mem_ilk_sayisi FROM personel
group by mem_ilk_baslama having mem_ilk_baslama < NOW() - INTERVAL 3650 DAY');

şeklindeki bir sql cümlesi işimi görmedi
Kullanıcı avatarı
conari
Üye
Mesajlar: 2102
Kayıt: 27 Nis 2006 03:10
Konum: İstanbul & Gebze Karışık

Mesaj gönderen conari »

ilk olarak bence tarih alanlarını yil olarak bul,
daha sonra bulduğun yılları year(bugün) den çıkar çıkan günler çalışma yıl süresi bunları da where koşulu ile kısıtlayabilirsin sonra da count ile toplattırırsınız.

Gün olayına giderseniz biraz daha uzar bu işlem
Bir kelimenin anlamını öğretsen bile yeter..
ResimResim
danaci
Üye
Mesajlar: 178
Kayıt: 24 May 2005 01:45

Mesaj gönderen danaci »

yardımcı olabilirmisiniz
sql ile personel memuriyet tarihini decode etmeyi nasıl yapabilirim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Hangi Veri Tabanı.
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
danaci
Üye
Mesajlar: 178
Kayıt: 24 May 2005 01:45

Mesaj gönderen danaci »

mysql arkadaşlar
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Selam...

- MySQL'de SELECT sonunda LIMIT a,b şeklinde bir ifade var.

- a sayısı Bulunan kayıtlar arasında gösterime ya da diğer bir deyişle sayfanın ilk kaydının sıra nosu, b sayısı ise kaç tane kayıt döndürüleceği...

- Bu başlığa ulaşıp da MySQL dışında başka bir veritabanıı kullanan arkadaşlar için kayıtlarda sayfalama işlemini nasıl yapabilirler hakkındaki şöyle bir üç kağıdı bildirelim.. 8)

Kod: Tümünü seç

SELECT top 10 * FROM tabloadi WHERE idAlani not in (SELECT top 10 idAlani FROM tabloadi)
- Burada ilk 10'den sonraki 10 kayıt alınır. Her sayfa için ikinci rakama ekleme yapılır. Parametrelerle bu rakamları değişken yapacaksınız. Her seferinde ikinci rakama gösterimdeki kayıt kadar ekleme yapacaksınız veya çıkarma yapacaksınız.

- İnsan isteyince oluyor, bunu planlamak oldukça zamanımı almıştı, sizlere faydası olsun, zaman kaybı olmasın :wink:
Resim
Resim ....Resim
danaci
Üye
Mesajlar: 178
Kayıt: 24 May 2005 01:45

Mesaj gönderen danaci »

mrmarman arkadaş,
acaba ben soruyumu yanlış sordum diyorum bu nedenle yeniden açıklama gereği duydum.

kurumdaki personellerin memuriyete ilk başlama tarihlerinden hareketle bunların kaç yıldır memuriyettte olduklarını bulmak amacım. ancak her personelin kaç yıllık memur olacağı değilde örneğin memuriyeti 1-10 yıllık olanlar 12 kişi , memuriyeti 11-20 yıllık olanlar 34 kişi ..... şeklinde bir veriye ulaşmak istiyorum.

ilgilendiğiniz için teşekkürler.
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

- Hocam pardon yaa uykusuzluğuma ver... Dün gece sabahladım telefon çalınca da erken kalkmak zorunda kaldım.

- Okuduğumla düşündüğüm farklı ... :oops: :oops: :oops:

- Önce her bir grubu elde edeceğin SQL cümlelerini hazırla ondan sonra bu cümleleri UNION ALL ile ard arda bağla... Örneğin...

Kod: Tümünü seç

'SELECT * FROM personel WHERE mem_ilk_baslama BETWEEN #01/01/1997# AND Date()      ' // 01 - 10 yıllık personel
'SELECT * FROM personel WHERE mem_ilk_baslama BETWEEN #01/01/1987# AND #01/01/1997#' // 11-20 yıllık
'SELECT * FROM personel WHERE mem_ilk_baslama BETWEEN #01/01/1977# AND #01/01/1987#' // 21-30 yıllık
// şeklinde
// ondan sonra bunları UNION ALL ile ard arda bağlayacaksın...
'SELECT *, ''01-10 Yıllık'' AS Yillik FROM personel WHERE mem_ilk_baslama BETWEEN #01/01/1997# AND Date()      '
'UNION ALL'
'SELECT *, ''11-20 Yıllık'' AS Yillik FROM personel WHERE mem_ilk_baslama BETWEEN #01/01/1987# AND #01/01/1997#'
'UNION ALL'
'SELECT *, ''21-30 Yıllık'' AS Yillik FROM personel WHERE mem_ilk_baslama BETWEEN #01/01/1977# AND #01/01/1987#''
- EDIT - Düzeltme...

- Diyeceksin ki sorum hariç herşeye cevap yazdın :oops: Son sorunda rakamsal olarak istediğini görmemişim... Aslında işin çok kolaymış...

- Yukarda yazdığım her SQL'i SELECT satırında iç select olarak kullan ama

Kod: Tümünü seç

SELECT Count(*) AS OnYillik ........
şeklinde değişkenlere saydır. Sonunda da bu değişkenleri raporlarsın...

- Kusura bakma... :idea:
Resim
Resim ....Resim
danaci
Üye
Mesajlar: 178
Kayıt: 24 May 2005 01:45

Mesaj gönderen danaci »

çok tşk ediyorum
benim mysql sürümüm her ne kadar union all deyimini tanımıyorsa da bunu tek tek (yani 3 select ile hallederim)
sanırım mysql 5.x e geçme zamanı geldi de geçiyor
Kullanıcı avatarı
mrmarman
Üye
Mesajlar: 4741
Kayıt: 09 Ara 2003 08:13
Konum: İstanbul
İletişim:

Mesaj gönderen mrmarman »

Bu kriterlere uyan personelin listesine ihtiyacın yoksa UNION ALL'a da ihtiyacın yok zaten. :idea: Onun için önemi yok ..
Resim
Resim ....Resim
Kullanıcı avatarı
sabanakman
Kıdemli Üye
Mesajlar: 3081
Kayıt: 17 Nis 2006 08:11
Konum: Ah bi Antalya olaydı keşke (Ankara)

Mesaj gönderen sabanakman »

Bu arada yanlış anlama olayı da bana yaradı iyi mi :) ?
Şaban Şahin AKMAN
_________________
Derin olan kuyu değil kısa olan iptir. - .
ikut

Mesaj gönderen ikut »

sabanakman yazdı:Bu arada yanlış anlama olayı da bana yaradı iyi mi :) ?
+1

banada yaradı
Cevapla