hat ich Hilfe mit einer MySQL-Abfrage möchten, dass:Vergleichen Werte in zwei Tabellen und Update table1 wenn table2 einen höheren Wert
- Für die
max(id)
für jede transaction.position Zeilen, in denent_type = 'buy'
- Gets jüngster (nach Datum) Preis vom
quotes2010
Tabelle (basierend auf dentransactions.symbol
) - , wenn der Preis für das Symbol ist höher als der Preis in der
transactions.high
Spalte - subtrahiert 0,01 von th e höher
quotes2010.price
- Aktualisieren Sie den höheren Preis in der
transactions.high
Spalte
. . . . in einer einzigen Abfrage.
Die einfachste Sache, die ich versuche, ist, aktualisieren Sie eine Tabelle, wenn der Preis für das Symbol in der zweiten Tabelle höher ist. Hier ist eine grundlegende Version der Datenbankstruktur:
CREATE TABLE IF NOT EXISTS `transactions` (
`id` int(10) unsigned NOT NULL auto_increment,
`symbol` char(8) NOT NULL,
`high` double(8,2) NOT NULL,
`t_type` enum('buy','sell') NOT NULL,
`t_date` datetime NOT NULL,
PRIMARY KEY (`id`),
KEY `position` (`position`,`id`),
KEY `t_date` (`t_date`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
INSERT INTO `transactions` VALUES(1, 'AO1', 1.35, '2010-12-12 00:08:57');
CREATE TABLE IF NOT EXISTS `quotes2010` (
`symbol` char(8) NOT NULL,
`price` double(8,2) NOT NULL,
`date` datetime NOT NULL,
PRIMARY KEY (`symbol`,`date`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
INSERT INTO `quotes2010` VALUES('A01', 1.40, '2010-12-19 10:03:05');
Spalte "Position" fehlt in Tabelle und Anweisung einfügen. – Ronnis
Ihr CREATE TABLE-Dump ist korrekt - es gibt kein Positionsfeld für Transaktionen. Stellen Sie außerdem Testdaten bereit, die repräsentativer sind, um die gewünschten Einschränkungen zu testen. – Riedsio
Sie sind beide richtig. Ich bin neu hier, und ich habe nur versucht, die Tischstruktur zu streichen (um klarer zu sein). In Zukunft werde ich es besser machen. – Drewneedshelp