2010-02-19 4 views
1

J'ai une table qui contient des enregistrements connexes (plusieurs révisions du même enregistrement). Chaque enregistrement a un champ de chaîne qui ressemble à une date (date, heure et microtime). Je veux sélectionner tous les enregistrements qui sont plus anciens qu'une date spécifique. Si un enregistrement a un enregistrement lié plus récent que la date spécifique, je ne veux pas sélectionner l'un de ces enregistrements liés. Des idées pour cette déclaration? Finalement, ce sera une déclaration REMOVE.Sélectionner les enregistrements multiples en fonction de la valeur de colonne d'un enregistrement

Edit: Quelques lignes Exemples

id shared_id date       type  other_data... 
1  2   2010-01-01 01:02:03.1234567 original ... 
2  3   2010-01-15 11:12:03.1234733 original ... 
3  2   2010-02-01 03:04:04.5465654 amendment ... 

Si ma date limite était « 2010-01-31 », je veux sélectionner id # 2 seulement parce id # 1 a un amendement plus récent que le date limite.

+0

pourriez-vous ajouter quelques exemples de données de votre base de données? – Dominik

Répondre

0

Peut-être que vous pouvez essayer la fonction DATEDIFF(), vérifier cela: Link 1

Ou celui-ci: Link 2

Ou peut-être vous pouvez essayer la requête classique (SELECT de table où les données < = anotherdata), mais dans ce cas vous devez convertir les données en format d'horodatage

0
DELETE from tablename where relatedField = 'relatedValue' AND dateField <= dateToDeleteFrom 

Quelque chose le long de ces lignes devrait faire ce que vous avez besoin de faire, si je comprends bien votre scena Rio Si vous fournissez un échantillon de données, je peux ajuster la déclaration pour représenter plus précisément votre besoin, mais je pense que c'est un bon point de départ.

HTH, Jc

1

J'ai trouvé ce link me aider à recueillir des l'instruction select.

SELECT DISTINCT T.shared_id,T.date,T.id 
FROM table T WHERE T.date = ( 
SELECT MAX(date) FROM table WHERE shared_id = T.shared_id) 
AND T.date < 'my_cut_off_date_string' 

Cela semble fonctionner pour moi. Merci pour l'aide de tout le monde.

Questions connexes